ディスク(c:
)にワイルドカード(*.txt
、*.jpeg
、*.doc
)を使用して可変長ファイルを探す必要があります。ディスク全体にワイルドカードを含むファイルを見つける
私は、次の機能を試してみましたが、私はそれが再帰的に作ることができない、それは働いていない:
もちろんvoid Recurse(LPCTSTR str)
{
WIN32_FIND_DATA file;
cout << "Value INPUT:" << str <<"\n";
HANDLE search_handle=FindFirstFile(str,&file);
if (search_handle) {
do {
if(file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY &&
strcmp(file.cFileName,"..")!=0
&& strcmp(file.cFileName,".")!=0
&& strcmp(file.cFileName,"$Recycle.Bin")!=0
&& strcmp(file.cFileName,"Recovery")!=0
&& strcmp(file.cFileName,"System Volume Information")!=0
&& strcmp(file.cFileName,"PerfLogs")!=0
&& strcmp(file.cFileName,"Windows")!=0)
{
str = file.cFileName;
cout << "Directory :" << file.cFileName <<"\n";
Recurse(str); // Function to remind new directory
} else {
if (file.cFileName == "*.txt") {
std::wcout << file.cFileName << std::endl; //Print files find with estension txt
}
}
} while(FindNextFile(search_handle,&file));
CloseHandle(search_handle);
}
}
私はそれが働いたかどうかを確認するために静的な値(*.txt
)でそれを試してみました、私がメインでからそれを呼び出したときに、それはうまくいきませんでした:
Recurse("C:\\*");
'file.cFileName ==" * .txt "':ここでは、 '=='はワイルドカードパターンマッチング演算子ではなく、2つのポインタが等しいかどうかを比較します。 – molbdnilo
大丈夫ですが、私のもう一つの問題は、再帰的な研究のためにどのように名前ディレクトリを渡したのか分かりません。 –
ディレクトリ ":"が印刷されていますか?私は奇妙な優先度(すなわち 'if((file.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)&&')で評価しているので、二項演算子の周りに括弧を入れます。それが問題なのかどうかわかりません。 – urban