Вопрос записи файла в c - PullRequest
1 голос
/ 23 июня 2010

Я пишу файл журнала в моем приложении c, метод для записи файла

fopen_s(&fMainFile, "c:\\LOG\\Filter.txt", "a");
fprintf(fMainFile, "SomeText");
fclose(fMainFile);

Я открываю дескриптор, после написания закрываю его, но эта запись через некоторое время вылетает из моего приложения, может ли кто-нибудь разобраться с этой проблемой, насколько опасно открывать и закрывать дескриптор снова и снова, или предлагать какие-либо другие подход для извлечения файла.

Ответы [ 3 ]

1 голос
/ 23 июня 2010

Вы обязательно должны добавить некоторые проверки ошибок в свой код, см. http://msdn.microsoft.com/en-us/library/z5hh6ee9%28VS.80%29.aspx для конкретного примера fopen_s Может быть, вы можете получить больше информации таким образом. Кроме того, ваш фрагмент кода выглядит правильно.

1 голос
/ 23 июня 2010

Как определяется fMainFile?Я подозреваю, что вы должны:

fopen_s(&fMainFile, "c:\\LOG\\Filter.txt", "a");
fprintf(&fMainFile, "SomeText");
fclose(&fMainFile);

Передать ссылку на функции fprintf / fclose, как вы делали с fopen_s!

РЕДАКТИРОВАТЬ: этот ответ недействителен, так как fopen_s принимает ФАЙЛ** параметр, как указано ниже в комментариях.

EDIT2: Как я уже говорил в комментариях, вы должны выполнять буферизованную запись (либо с вашим собственным буфером, либо с помощью функций setvbuf () для вашего файла).Кроме того, не открывайте и не закрывайте файл каждый раз, а оставляйте его открытым и закрывайте только тогда, когда это действительно необходимо (ввод завершен).используйте fflush () для принудительной записи на диск (вместо fclose ()).

0 голосов
/ 23 июня 2010

Вы должны проверить возвращаемое значение fopen_s и вызывать fprintf и fclose только в случае успеха

if (fopen_s(&fMainFile, "c:\\LOG\\Filter.txt", "a") == 0)
{
  fprintf(fMainFile, "SomeText");
  fclose(fMainFile);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...