c中的文件写作问题

时间:2010-06-23 07:31:35

标签: c windows

我在我的c应用程序中编写日志文件,编写文件的方法是

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

我打开手柄,写完后关闭它,但是这篇文章在一段时间后崩溃了我的应用程序,可以解决这个问题,一次又一次打开和关闭手柄有多大危险,或者提出任何其他建议扭动文件的方法。

3 个答案:

答案 0 :(得分:1)

如何定义fMainFile?我怀疑你应该:

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

像对fopen_s一样传递对fprintf / fclose函数的引用!

编辑:这个答案无效,因为fopen_s在评论中采用FILE **参数,如下所述。

EDIT2:正如我在评论中所说,你应该做缓冲写入(使用自己的缓冲区或使用setvbuf()函数为你的文件)。此外,不要每次都重新打开/关闭文件,但只有在您确实需要(输入完成)时才将其保持打开和关闭状态。使用fflush()强制写入磁盘(而不是fclose())。

答案 1 :(得分:1)

您一定要在代码中添加一些错误检查,有关特定的fopen_s示例,请参阅http://msdn.microsoft.com/en-us/library/z5hh6ee9%28VS.80%29.aspx。也许你可以通过这种方式获得更多信息。除此之外,您的代码段看起来是正确的。

答案 2 :(得分:0)

你必须检查fopen_s的返回值,如果成功则只调用fprintf和fclose

if (fopen_s(&fMainFile, "c:\\LOG\\Filter.txt", "a") == 0)
{
  fprintf(fMainFile, "SomeText");
  fclose(fMainFile);
}