c语言中的文件写入问题
我正在c应用程序中写入日志文件,写入文件的方法是c语言中的文件写入问题,c,windows,C,Windows,我正在c应用程序中写入日志文件,写入文件的方法是 fopen_s(&fMainFile, "c:\\LOG\\Filter.txt", "a"); fprintf(fMainFile, "SomeText"); fclose(fMainFile); 我打开了句柄,写了之后我关闭了它,但是写了一段时间后我的应用程序崩溃了,有人能解决这个问题吗,一次又一次地打开和关闭句柄有多危险,或者提出了任何其他写文件的方法。fMainFile是如何定义的?我想你应该: fopen_s(&fMa
fopen_s(&fMainFile, "c:\\LOG\\Filter.txt", "a");
fprintf(fMainFile, "SomeText");
fclose(fMainFile);
我打开了句柄,写了之后我关闭了它,但是写了一段时间后我的应用程序崩溃了,有人能解决这个问题吗,一次又一次地打开和关闭句柄有多危险,或者提出了任何其他写文件的方法。fMainFile是如何定义的?我想你应该:
fopen_s(&fMainFile, "c:\\LOG\\Filter.txt", "a");
fprintf(&fMainFile, "SomeText");
fclose(&fMainFile);
传递对fprintf/fclose函数的引用,就像使用fopen_s一样
编辑:此答案无效,因为fopen_s采用下面注释中所述的文件**参数
EDIT2:正如我在评论中所说的,您应该进行缓冲写入(使用您自己的缓冲区或对文件使用setvbuf()函数)。另外,不要每次都重新打开/关闭文件,而是让它保持打开状态,只有在确实需要时(输入完成)才关闭它。使用fflush()强制写入磁盘(而不是fclose())。您肯定应该在代码中添加一些错误检查,请参阅以获取特定的fopen示例。也许你可以通过这种方式获得更多的信息。除此之外,您的代码片段看起来是正确的。您必须检查fopen_s的返回值,并且只有在成功时才调用fprintf和fclose
if (fopen_s(&fMainFile, "c:\\LOG\\Filter.txt", "a") == 0)
{
fprintf(fMainFile, "SomeText");
fclose(fMainFile);
}
一个明显的问题是,您没有进行任何错误检查-这是对
fopen_s
调用的强制性要求。我已经应用了错误检查代码,但它对我没有帮助。事实上,我正在编写大量数据,5秒内几乎100行,它写了一些数据,但过了一段时间它就崩溃了。@Arman:真的有必要在每次写的时候打开和关闭文件吗?你为什么要这么做?@Greg,如果我不关上把手,对悬挂着的记忆有多危险。或者我使用的方法是危险的。请给我解释一下.FILE*fMainFile;我把它定义为全局的。它看起来像是fopen\u s
takesFILE**
而fclose
takesFILE*
我知道了,我没想到。放弃这个答案,那么错误一定在其他地方。也许如果你发布更多的代码,我们就能找到它。我有一个从网络接收数据并写入日志文件的应用程序。数据输入的速率几乎是每5秒100个数据包,每个数据包的最大大小是400字节。然后我建议缓冲输入并写入更大的数据块,比如说16kB。还有,为什么每次都要关闭文件?让它保持打开状态,并在所有书写完成后关闭它。可以使用fflush()强制写入磁盘。