1

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

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

相同的代码在控制台应用程序中也可以在单独的线程中工作。

平台为Win7 64位。
静态链接到运行时和 MFC。

4

1 回答 1

1

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

于 2012-05-10T08:04:34.593 回答