2011-07-04 10 views
0
#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ファイルの数をディレクトリで計算します。

+1

'のGetLastError()'は何を返すのですか? – RedX

答えて

1

パスに無効なスラッシュが使用されています。 Windowsでは、バックスラッシュは '/'の代わりに '\'として使用されます。文字列の中にバックスラッシュを置くときに思い出させるために、別のものを前置する必要があります: "\\"。

+0

はまだ同じ出力 –

+1

ネイティブパスで作業するのは良い方法ですが、FindFirstFileもフォワードスラッシュで動作します。 – stijn

+0

http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.16 - > "すべてのファイル名にスラッシュを使用してください" –

0

d:/ testerの下にtxtファイルがない場合、FindFirstFileは0を返します。それとは別に、0を返すまでFindNextFileをループする必要があります。

+0

ループした後も出力は同じです。編集後のループは同じですが、 –

+0

を編集してください:FindFirstFileが0を返す限り、単一のファイルが見つからないのでループできません。 cnicutarのアドバイスに従い、GetLastError()の出力を表示しましたか? – stijn

0

まあ、このコードでは、ディレクトリ内のファイルの一覧を表示します(私は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

私は単一のスラッシュを使用しています、それは私のために働く、私自身の答えを参照してください –

0
#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; 
} 

このコードは私のために正常に動作します

関連する問題