CreateFile в отдельном потоке возвращает INVALID_HANDLE_VALUE в приложении MFC - PullRequest
1 голос
/ 31 октября 2011

У меня есть приложение MFC, которое запускает отдельный поток для загрузки некоторых файлов через cURL. В начале он загружает текстовый файл с размерами файлов и временем последней записи. Затем он проверяет файлы на диске и ставит их в очередь для загрузки, если они имеют разные значения. Проблема в том, что вызов CreateFile в потоке произвольно возвращает INVALID_HANDLE_VALUE. Я всегда делаю CloseHandle () после успешного CreateFile (). Плохие файлы просто случайны. Иногда файл в корневом каталоге, другой раз файл во вложенном каталоге. Проблема не связана с локализацией или именами каталогов / файлов, поскольку иногда все проверки проходят, а иногда нет. GetLastError () иногда возвращает 2 или 3: «Файл не найден» / «Путь не найден» соответственно.

Когда я помещаю функцию, проверяющую время и размер записи файла, прямо в функцию OnInitDialog (), все работает. Это пахнет многопоточностью, но я дважды проверил все, от выделения памяти до файловых дескрипторов.

Тот же код работает в консольном приложении и в отдельном потоке.

Платформа Win7 64bit.
Статическая привязка к среде выполнения и MFC.

1 Ответ

1 голос
/ 10 мая 2012

в моем случае GetCurrentDirectory () через некоторое время вернул путь system32, поэтому мой код не удался из-за учетных данных. Я исправил проблему, определив пути к файлам вручную (получая exe-путь в начале и используя его оттуда ...). Убедитесь, что вы не пытаетесь записывать / читать из привилегированного места на диске. Проверьте свои пути.

...