WriteFile()函数可以停止工作吗? 我有一个用C++编写的Windows程序。它使用WriteFile()WinAPI函数定期将信息写入文本文件
程序在启动时打开文件,并使文件保持打开状态,直到退出。程序使用以下代码打开文件:WriteFile()函数可以停止工作吗? 我有一个用C++编写的Windows程序。它使用WriteFile()WinAPI函数定期将信息写入文本文件,c,windows,winapi,visual-c++,C,Windows,Winapi,Visual C++,程序在启动时打开文件,并使文件保持打开状态,直到退出。程序使用以下代码打开文件: CreateFileW(path, GENERIC_WRITE, FILE_SHARE_READ, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 最近出现了以下问题:在运行大约10天后,程序停止向文件写入信息。但当程序重新启动时,它恢复了对文件的写入 假设程序没有bug,并且WriteFile继续被调用以写入数据:WriteFile函数能否在正常工
CreateFileW(path, GENERIC_WRITE, FILE_SHARE_READ, &sa,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
最近出现了以下问题:在运行大约10天后,程序停止向文件写入信息。但当程序重新启动时,它恢复了对文件的写入
假设程序没有bug,并且WriteFile继续被调用以写入数据:WriteFile
函数能否在正常工作一段时间后开始失败?这是什么原因造成的?
(除了磁盘空间问题。文件很小,磁盘有足够的空间)
(不幸的是,程序没有检查
WriteFile
的返回值)。很难想象WriteFile()
API函数有错误。下一步必须是检查错误代码,并在函数失败时调用GetLastError()
。写文件()API函数有bug是非常不可信的。下一步必须检查错误代码,并在函数失败时调用GetLastError()
。可能导致此问题的一个原因是:
- 当Windows出于节能目的停止硬盘时,文件将关闭或关闭
- 当它进入待机模式时也是如此
- 当Windows出于节能目的停止硬盘时,文件将关闭或关闭
- 当它进入待机模式时也是如此
- 可能导致这种情况的一个原因是:
WriteFile
的返回值,那么您所能做的就是推测。(无关):您可以使用FILE\u APPEND\u DATA
而不是GENERIC\u WRITE
检查WriteFile()的MSDN条目。函数失败的原因很多。如果您没有访问应用程序的源代码来向函数添加错误检查,请考虑使用来自SysStudies的Fielon工具来监视文件写入。我不知道这个工具在很长一段时间内的性能有多好,但也许你会发现它很有用。@Marcelo Cantos,长时间打开文件有什么不对?它会导致写文件失败吗?我将其保持打开状态,以确保没有其他应用程序将其打开,并禁止我的应用程序对其进行写访问。我不知道它失败的原因,但同样,你不应该让文件保持打开状态那么长时间。假设它是一个日志文件,通常的做法是在达到时间和/或卷阈值(通常,卷阈值是“一个日志条目”)后关闭并重新打开它。您还应该回收日志,例如,在午夜,关闭当前输出文件并用日期戳重命名,然后在下一个条目准备好写入时启动新日志。任何情况都可能导致写入失败,如果出现失败,则后续写入很可能会失败。一些可能性:内存不足、挂起的写入太多、间歇性硬件故障。如果您没有检查WriteFile
的返回值,那么您所能做的就是推测。(无关):您可以使用FILE\u APPEND\u DATA
而不是GENERIC\u WRITE
检查WriteFile()的MSDN条目。函数失败的原因很多。如果您没有访问应用程序的源代码来向函数添加错误检查,请考虑使用来自SysStudies的Fielon工具来监视文件写入。我不知道这个工具在很长一段时间内的性能有多好,但也许你会发现它很有用。@Marcelo Cantos,长时间打开文件有什么不对?它会导致写文件失败吗?我将其保持打开状态,以确保没有其他应用程序将其打开,并禁止我的应用程序对其进行写访问。您只需将其添加为注释。您只需将其添加为注释。