Моя цель - перечислить текстовые файлы в определенном каталоге и позволить пользователю загружать один из файлов.FindFirstFile Always Returning Invalid Handle
Я использую Windows, Unicode предопределен в моем компиляторе.
Вопрос: FileHandle всегда имеет значение INVALID_HANDLE_VALUE. В чем причина этого и как я могу его исправить?
Мой последний код выглядит следующим образом:
ListAllTxtFiles(L"C:\\Users\\Tnc\Desktop\\Yazılım Çalışmaları\\Projects\\Oyun Projem\\data\\SaveFiles\\");
void ListAllTxtFiles(const wchar_t *Directory)
{
TCHAR Buffer[2048];
wsprintf(Buffer, L"s%*.txt", Directory);//there are security considerations about this function
WIN32_FIND_DATAW FindData;
HANDLE FileHandle = FindFirstFileW(Buffer, &FindData);
if (FileHandle == INVALID_HANDLE_VALUE)
{
printf("Could not find any files..\n");
}
else
{
do
{
printf("Found %s\\%s\n", Directory, FindData.cFileName);
} while (FindNextFile(FileHandle, &FindData));
CloseHandle(FileHandle);
}
}
Вы пробовали распечатать результат из ['GetLastError'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms679360%28v=vs.85%29.aspx)? –
'GetLastError' ответит на этот вопрос для вас. Скорее всего, путь неверен. –
Джон уже ответил на ваш вопрос. Ваша строка формата в 'wsprintf()' неверна, что приводит к тому, что 'Buffer' получает плохие данные, поэтому' FindFirstFileW() 'терпит неудачу. С другой стороны, вы используете 'FindFirstFileW()' напрямую, поэтому 'Buffer' должен быть объявлен как' WCHAR' вместо 'TCHAR', а' wsprintf() 'должен быть' wsprintfW() '. И поскольку 'cFileName' является' WCHAR [] 'в' WIN32_FIND_DATAW', чтобы напечатать его как строку Юникода, вам нужно либо использовать 'wprintf()' вместо 'printf()', либо хотя бы использовать '% ls 'вместо'% s' в 'printf()'. –