2015-09-04 4 views
0

я пытаюсь найти все файлы на всех дисках, операционная система Windows, 8FindFirstFile Windows8 ошибка

std::string FolderName = "C:\\"; 
    FindAllFiles(FolderName); 
... 
void FindAllFiles(std::string FolderName) 
{ 
    WIN32_FIND_DATA FileData; 
    HANDLE FirstFile = FindFirstFile(&FolderName[0], &FileData); 
    if (FirstFile == INVALID_HANDLE_VALUE) { 
     std::cout << "Invalid handle value" << std::endl; 
     return; 
    } 

    while (FindNextFile(FirstFile, &FileData)) 
    { 
     if (isalpha(FileData.cFileName[0])) 
     { 
      if (FileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) 
      { 
       std::cout << FileData.cFileName << std::endl; 
      } 
      else 
      { 
       std::string NewPath = FolderName + FileData.cFileName; 
       NewPath = NewPath + "\\*.*"; 
        FindAllFiles(NewPath); 
      } 
     } 
    } 
    } 

но всегда получают ошибку INVALID_HANDLE_VALUE. В чем проблема?

+0

Поскольку вы используете узкий 'зЬй :: string', вы должны использовать' FileFirstFileA', а также '' WIN32_FIND_DATAA' и FindNextFileA'. –

+0

Возвращаемое значение говорит, что оно потерпело неудачу, но не почему. 'GetLastError()' скажет вам, почему. –

+0

Я изменяю FindFirstFile на FindFirstA и WIN32_FIND_DATA на WIN32_FIND_DATAA и ничего – Lannser

ответ

1

Вы не звонили GetLastError(), которые вы всегда должны делать, когда функция Windows, не удается, но наиболее вероятной причиной является то, что вы не заполнили FileData правильно перед вызовом FindFirstFile.

должны быть подготовлены Почти все выходные буферы, предназначенные для использования функций Windows:

  • Заполнение dwSize элемента с помощью sizeof (эта структура не имеет этого)
  • заполняющая все остальные члены с нуля.

Так что попробуйте инициализировать буфер:

WIN32_FIND_DATAA FileData = {}; 
+0

Интересно, что [пример использования минимального использования Microsoft] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364418 (v = vs.85) .aspx) не делает такой инициализации. – WhozCraig

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