2015-03-25 3 views
0

Я пытаюсь записать содержимое datastructure в файл, но по какой-то причине file.is_open() возвращает false. Я что-то упускаю? Печать должна работать нормально, поскольку я тестировал ее с помощью cout.Файл не открыт для записи

std::ofstream file; 

file.open(filename, std::ofstream::out | std::ofstream::trunc); 

for(int i = 0; i < 1000; ++i) { 

    Candy* tmp = index[i]; 
    for(; tmp; tmp = tmp->next){ 
     if(file.is_open()){ 
      file << tmp->ID << ";" << tmp->amount << ";" << tmp->location << 
     } 
     else{ 
      std::cout << "error" << std::endl; 
     } 
    } 
    file.close(); 
} 
+0

Вам нужно всего лишь проверить, что файл открыт один раз. Не каждый раз. –

+3

Работает ли вообще *, а затем останавливается? Правильно отступы, кажется, что вы закрываете файл в конце вашего внешнего цикла 'for', поэтому, когда' i == 1' и т. Д., Файл обязательно будет закрыт. –

ответ

1

Возможно ли, что ваши фигурные скобки несовместимы? Вы никогда не закрываете пределы первого цикла for, поэтому вы закрываете файл на первой итерации цикла.

+0

Да, я переместил .close() из цикла, и теперь он работает! Я думаю, вы становитесь слепым к своему собственному коду, когда и смотрите на него слишком долго: D. Благодаря! – user2933157

1

У вас есть правильные разрешения на запись в путь к файлу? Выполняет ли путь к файлу на самом деле?

Вы можете проверить errno, чтобы узнать, что пошло не так.

#include <cerrno> 

std::cout << "File error: " << strerror(errno) << std::endl; 
Смежные вопросы