怎样搜索文件系统里的所有文件?我以前采用的方法是FindFirst,FindNext,FindClose的一套方法,但缺点是对于某些文件和文件夹总是不能识别。有没有其它好的方法?或者改进Find系列函数的方法?
//---------------------------------------------------------------------------
#include <vcl.h >
#pragma hdrstop
#include "Unit1.h "
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm "
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------
void __fastcall GetDirectoryFile(AnsiString Dir)
{
HANDLE FindHandle;
bool NextFind;
WIN32_FIND_DATA wfd;
AnsiString FileName;
//ShowMessage( "1: "+FileName);
if(Dir[Dir.Length()] != \\)
Dir = Dir + "\\ ";
//ShowMessage( "2: "+Dir);
FindHandle = FindFirstFile(AnsiString(Dir+ "*.* ").c_str(),&wfd);
while(FindHandle != INVALID_HANDLE_VALUE)
{
FileName = AnsiString(wfd.cFileName);
//ShowMessage( "3: "+FileName);
if(FileName != ". " && FileName != ".. ")
{
if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
//ShowMessage( "Now: in to GetDirectoryFile ");
GetDirectoryFile(Dir + AnsiString(wfd.cFileName));
}
else
{
if(ExtractFileExt(FileName)== "exe ")//在这里出现了问题始终为假
ShowMessage(FileName+ExtractFileExt(FileName));
Form1- >Memo1- >Lines- >Add(Dir + FileName);
//continue;
}
} NextFind = FindNextFile(FindHandle,&wfd);
if(!NextFind) break;
} FindClose(FindHandle);
}
void EnumAllFiles()
{
char buf[128];
GetLogicalDriveStrings(128, buf);
for(char* s=buf; *s; s+=4)
GetDirectoryFile(s);
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
EnumAllFiles();
Label1- >Caption=IntToStr(Memo1- >Lines- >Count);
}
//---------------------------------------------------------------------------