Могу ли я записать в новый файл, а затем прочитать из этого файла в той же программе C? - PullRequest
0 голосов
/ 18 ноября 2011
FILE *new = fopen("new.out", "w+"); // creates a new file that didnt exist before
char finput[50];

fprintf(new, "hello\nworld\n");

while(fgets(finput, 51, new) != NULL)
{ /*never reaches this point*/ }

Что я делаю не так?Если я напишу в файл, который еще не существует, возможно ли позднее прочитать этот файл?

Ответы [ 4 ]

3 голосов
/ 18 ноября 2011

Вы должны rewind или fseek перед повторным чтением. И, пожалуйста, не вызывайте переменную new (потому что это ключевое слово C ++).

1 голос
/ 18 ноября 2011

Взгляните здесь .Они советуют вам проверить errno на ошибку.Вы можете использовать

perror("Fgets failed");

, чтобы напечатать полное сообщение об ошибке.

К проблеме: вам нужно позвонить fseek при переходе с записи на чтение (всегда).

fseek(new, 0, SEEK_SET);

перематывает файл.

1 голос
/ 18 ноября 2011

Вы открыли файл в режиме w+, который доступен для чтения / записи в режиме добавления.После вашей команды fprintf () указатель файла находится в конце файла, что означает, что читать нечего, кроме EOF.Вы должны fseek() перейти к другой точке файла или rewind() к началу.

1 голос
/ 18 ноября 2011

Вам нужно что-то сделать, чтобы изменить режим между записью и чтением.fseek возможно.

В потоках, открытых для обновления (чтение + запись), вызов fseek позволяет переключаться между чтением и записью.

fsetpos и rewind также работают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...