单独的线程中的CreateFile在MFC应用程序中返回INVALID_HANDLE_VALUE

时间:2011-10-31 14:11:34

标签: multithreading winapi mfc createfile

我有一个MFC应用程序,它启动一个单独的线程,通过cURL下载一些文件。在开始时,它会下载包含文件大小和上次写入时间的文本文件。然后它检查磁盘上的文件,如果它有不同的值,则将其排队下载。问题是;线程中的CreateFile调用任意返回INVALID_HANDLE_VALUE。成功的CreateFile()之后我总是做CloseHandle()。失败的文件只是随机的。有时是根目录中的文件,另一次是嵌套目录中的文件。该问题与本地化或目录/文件名无关,因为有时所有检查都通过但有时不通过。 GetLastError()有时会返回2或3,分别是“找不到文件”/“找不到路径”。

当我将函数检查文件的写入次数和大小直接放入OnInitDialog()函数时,一切正常。这有点像多线程问题,但我仔细检查了从内存分配到文件句柄的所有内容。

相同的代码也可以在一个单独的线程中在控制台应用程序中运行。

平台是Win7 64bit 静态链接到运行时和MFC。

1 个答案:

答案 0 :(得分:1)

在我的情况下,GetCurrentDirectory()在一段时间后返回system32路径,因此我的代码因凭据而失败。我通过手动确定文件路径来修复问题(在开始时获取exe路径并从那里使用它......)。确保您没有尝试写入/读取磁盘上的特权位置。检查你的路径。