WriteFile()函数可以停止工作吗?

时间:2011-05-04 22:17:02

标签: c windows winapi visual-c++

我有一个用C ++编写的windows程序。它使用WriteFile() WinAPI函数定期将信息写入文本文件。

程序在启动时打开文件并保持文件打开直到退出。程序使用以下代码打开文件:

CreateFileW(path, GENERIC_WRITE, FILE_SHARE_READ, &sa,
    OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

最近发生了以下问题:运行大约10天后,程序停止向该文件写入信息。但是当程序重新启动时,它会恢复写入文件。

假设程序没有错误并且继续调用WriteFile来写入数据:WriteFile函数在正常工作一段时间之后才能开始失败吗?是什么导致这个? (磁盘空间问题除外。文件很小,磁盘空间足够)。

(遗憾的是程序没有检查WriteFile的返回值)。

3 个答案:

答案 0 :(得分:3)

WriteFile() API函数有一个错误,这是非常难以置信的。您的下一步必须是检查错误代码并在函数失败时调用GetLastError()

答案 1 :(得分:0)

可能导致这种情况的一件事是:

  • 当Windows停止硬盘驱动器以节约能源时,文件已关闭或
  • 当它进入待机模式时

答案 2 :(得分:0)

我们的情况下WriteFile函数失败了,因为我们在计时器中调用了函数。线程中有另一个函数在并行线程中调用ReadFile(并访问同一个文件)。由于WriteFile无法访问该实例的文件,因此它曾失败!