如何找到文件夹下所有的文件,并把文件名显示到Memo1内
void __fastcall SearchFile::FindFile(AnsiString srcDir,TMemo *Memo,TMemo *memo1,TMemo *memo2)
{
WIN32_FIND_DATA FileData;
HANDLE hSearch;
DWORD dwAttrs;
AnsiString SrcDir=srcDir+"*.*";
AnsiString fName="";
unsigned int files=0;
AnsiString ch;
BOOL fFinished = FALSE;
hSearch = FindFirstFile((srcDir+"*.*").c_str(), &FileData);
while (!fFinished)
{
fName=FileData.cFileName ;
bool flag=true;
if (fName=="."||fName=="..") flag=false;
int atr=FileData.dwFileAttributes &faDirectory;
//如果是文件夹
if (flag&&atr==faDirectory)
{
AnsiString sDir=srcDir+fName;
ch=*sDir.AnsiLastChar();
if (ch!=\\) sDir+="\\";
memo1->Lines->Add(srcDir+fName);
FindFile (srcDir+fName+"\\",Memo,memo1,memo2);
}
//如果是文件
else if (flag)
{
if (fName=="*.exe")
memo2->Lines->Add(fName);
else
//判断是否是满足你要求的文件,是则操作此文件
Memo->Lines->Add(srcDir+fName);
Memo->Lines->Add(FileData.nFileSizeLow);
}
//搜索下一个文件
if (!FindNextFile(hSearch, &FileData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
fFinished = TRUE;
}
}
}
if (!FindClose(hSearch))
{
ShowMessage("无法关闭文件!");
}
}
不用如此的,哥们有个变通的方法:
在window 3.1有个组件 TFileListBox
将Directory属性指向你的文件夹,它自动会列出所有在文件夹中的文件,遍历FileListBox,将它的内容读入你的Memo即可!
如果你只是用它的功能,建议new一个,用完了delete 即可
SailorTPM(提早二十年退休) 的方法偶没用过,但看起来好诱人!楼主请试一试。
看来已经来晚了很多了
如果只是获取一个目录的文件名,使用 TFileListBox 控件会简单些。
不过我推荐使用FindFirst函数,比较灵活。而且是程序员应该具备的基本功。
下面是小例子。你可以把Pathname改成你需要的。
这里可以取得文件属性、文件大小等等可能有用的信息。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TSearchRec sr;
String s,Pathname="c:\\";
int Count = 1;
if(FindFirst(Pathname+"*.*",faAnyFile,sr) == 0)
{
do
{
//判断是文件
if ((sr.Attr&faDirectory)==0)
{
s.printf("[%3d] %s 文件大小=%d",Count++,sr.Name,sr.Size);
Memo1->Lines->Add(s);
}
else //判断为目录:
if (sr.Name!="." && sr.Name!="..")
{
s.printf("[%3d] %s <目录>",Count++,sr.Name);
Memo1->Lines->Add(s);
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
}
//---------------------------------------------------------------------------