2017-01-30 4 views
1

У меня возникли трудности итеративно записи в текстовый файл в C.Как добавить текст в текстовый файл итеративно в с

Мне нужно выписать ряд значений после каждой итерации цикла для так что если я остановлю свою программу от запуска в любой момент, я не потеряю данные, которые я уже собрал.

Код У меня есть работы, если я выполняю весь цикл, но если я использую команду ctrl + c, чтобы остановить запуск программы, потому что слишком долго мой .txt-файл пуст.

Я не знаю, вызвано ли это командой ctrl + c, потому что у файла нет возможности закрыть или нет, но есть ли другие решения? Должен ли я открыть файл и закрыть его во время каждой итерации цикла и добавить в файл .txt? Я думал, что это может привести к перезаписыванию предыдущих данных, записанных в файл .txt, а также к увеличению времени выполнения.

Heres очень простой пример того, что я сейчас делаю, надеюсь, это показывает, что я пытаюсь сделать:

FILE *fp; 
fp = fopen("Output.txt", "w"); 
int a = 0; 
int b = 0; 
int c = 0; 
for(int i=0;i<500;i++) 
{ 
    a = a+1; 
    b = b+1; 
    c = c+1; 
    printf("a = %d\tb = %d\tc = %d\n"); // printing to console 
    fprintf(fp,"%d,%d,%d\n",a,b,c); // printing to file 
} 
fclose(fp); 
+0

добавить 'fflush (fp);' на каждой итерации. Или установите его как небуферизованный. – LPs

ответ

3

Вы должны fflush после каждого fprintf к файлу.

Если поток указывает на выходной поток или поток обновлений, в котором самая последняя операция не была ввода, fflush() должно вызывать никаких неписаные данных для этого потока должны быть записаны в файл, и последней модификации данных и последний временные метки изменения статуса основного файла должны быть отмечены для обновления.

То есть,

for(int i=0;i<500;i++) 
{ 
    a = a+1; 
    b = b+1; 
    c = c+1; 
    printf("a = %d\tb = %d\tc = %d\n"); // printing to console 
    fprintf(fp,"%d,%d,%d\n",a,b,c); // printing to file 
    fflush(fp); /* <== here */ 
} 

PS: Пробелы не дефицитный товар.

+0

Работал отлично. Спасибо. – user3716193