2015-09-04 2 views
-2

Моя цель - перечислить текстовые файлы в определенном каталоге и позволить пользователю загружать один из файлов.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); 
    } 
} 
+0

Вы пробовали распечатать результат из ['GetLastError'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms679360%28v=vs.85%29.aspx)? –

+0

'GetLastError' ответит на этот вопрос для вас. Скорее всего, путь неверен. –

+0

Джон уже ответил на ваш вопрос. Ваша строка формата в 'wsprintf()' неверна, что приводит к тому, что 'Buffer' получает плохие данные, поэтому' FindFirstFileW() 'терпит неудачу. С другой стороны, вы используете 'FindFirstFileW()' напрямую, поэтому 'Buffer' должен быть объявлен как' WCHAR' вместо 'TCHAR', а' wsprintf() 'должен быть' wsprintfW() '. И поскольку 'cFileName' является' WCHAR [] 'в' WIN32_FIND_DATAW', чтобы напечатать его как строку Юникода, вам нужно либо использовать 'wprintf()' вместо 'printf()', либо хотя бы использовать '% ls 'вместо'% s' в 'printf()'. –

ответ

1
wsprintf(Buffer, L"s%*.txt", Directory); 

должен быть

wsprintf(Buffer, L"%s*.txt", Directory); 

Вы только что получили ваш wsprintf строка формата неправильно.

+0

Если бы вы знали, сколько часов я потратил на то, чтобы решить это, вы плачете из-за горя. Спасибо: D – bfkjohns

+0

Но я могу получить только первую букву файла. Например, я получаю dor-файл .txt с именем «what» только буквой w. Почему это происходит? – bfkjohns

+0

'Потому что вы, вероятно, должны печатать с использованием 'wprintf' или некоторых таких? –

Смежные вопросы