Я не получаю фактическое количество файлов в моем каталоге.В чем проблема? - PullRequest
0 голосов
/ 04 июля 2011
#include <windows.h>
#include <iostream>

using namespace std;
int main() {
    bool x = true
int i = 0;
wchar_t* file = L"d:/tester/*.txt";
WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
hFind = FindFirstFile(file, &FindFileData); 
if( hFind == INVALID_HANDLE_VALUE ) {
    cout << "find failed\n";
}  else {
           while(x) {  
        i++;
        x = FindNextFile( hFind ,&FindFileData );
           }
   }

cout << "\nnumber of files in the directory : " << i << endl <<endl ;
  }

Вывод, который я получаю:

find failed

number of files in the directory : 0

Где я иду не так? Я хочу, чтобы количество файлов .txt было рассчитано в каталоге.

Ответы [ 4 ]

1 голос
/ 04 июля 2011

Вы используете недопустимые косые черты в пути.В Windows обратная косая черта используется «\» вместо «/».Просто чтобы напомнить, что при добавлении обратной косой черты в строку следует добавить еще одну:

0 голосов
/ 04 июля 2011
#include <windows.h>
#include <iostream>

using namespace std;
int main() {
bool x = true;
int i = 0;
wchar_t* file = L"d:/testing/*.txt";
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(file, &FindFileData); 

if( hFind != INVALID_HANDLE_VALUE ) {
    i++;
    while ((x = FindNextFile(hFind, &FindFileData)) == TRUE)
     i++;   
}
cout << "number of files" << i << endl;
}

Этот код отлично работает для меня

0 голосов
/ 04 июля 2011

Ну, этот код должен дать вам список файлов в каталоге (я давно ответил на вопрос Q, и он работает). Вы можете настроить его, чтобы получить количество файлов по вашему выбору.

Проблема с вашим кодом состоит в том, что путь не распознается из-за одиночной обратной реакции, как было сказано @ Eugene.

#include <windows.h>

int main(int argc, char* argv[])
{
    WIN32_FIND_DATA search_data;

    memset(&search_data, 0, sizeof(WIN32_FIND_DATA));

    HANDLE handle = FindFirstFile("c:\\*", &search_data);

    while(handle != INVALID_HANDLE_VALUE)
    {
        cout<<"\n"<<search_data.cFileName;

        if(FindNextFile(handle, &search_data) == FALSE)
           break;
    }

    //Close the handle after use or memory/resource leak
    FindClose(handle);
    return 0;
}

Hth!

0 голосов
/ 04 июля 2011

Если в d: / tester нет файлов txt, FindFirstFile вернет 0; кроме этого, вы должны зациклить FindNextFile, пока он не вернет 0.

...