关于遍历(枚举)的一个问题~~~~~~请进来赐教。

LngDotin 2006-06-30 08:58:48
这是一个老掉牙的问题,可是对于我来说是头一次做。
问题:一个文件夹下,既有文件,又有子文件夹,如何遍历出该文件夹下的所有文件和所有子文件夹下的所有文件?请高手留下宝贵的源码,以供参详。谢谢。
...全文
168 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ly_liuyang 2006-06-30
  • 打赏
  • 举报
回复
递归算法嘛
BlueDeepOcean 2006-06-30
  • 打赏
  • 举报
回复
另一个函数:

bool DeleteDirTree(AnsiString filePath)
{
bool retVal =true;
AnsiString fileName;

WIN32_FIND_DATA foundFile;

HANDLE hFile = FindFirstFile((filePath+"\\*.*").c_str(),&foundFile);

if(hFile != INVALID_HANDLE_VALUE)
{
do
{
if(strcmp(foundFile.cFileName,".")!=0 && strcmp(foundFile.cFileName,"..")!=0)
{
fileName = filePath + "\\" + foundFile.cFileName;
if((foundFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!=0)
{
DeleteDirTree(fileName.c_str());
RemoveDirectory(fileName.c_str());
}
else
{
FileSetAttr(fileName, FileGetAttr(fileName) & !faReadOnly);
DeleteFile(fileName.c_str());
}
}
}
while(FindNextFile(hFile,&foundFile)!=0);
}

FindClose(hFile);

return retVal;
}
samchoy 2006-06-30
  • 打赏
  • 举报
回复
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
AnsiString Path = Edit1->Text;

if (Path == "")
Path = ExtractFilePath(Application->ExeName);

ListBox1->Clear();
GetFiles(Path);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::GetFiles(AnsiString Path)
{
TSearchRec sr;

if (Path[Path.Length()] != '\\')
Path += "\\";
if (FindFirst(Path+"*.*", faArchive|faDirectory, sr) == 0)
{
do
{
if (sr.Attr == faArchive) // 文件
{
ListBox1->Items->Add(sr.Name);
}
else if (sr.Attr == faDirectory) // 目录以 <目录名> 表示
{
if (sr.Name != "." && sr.Name != "..")
{
ListBox1->Items->Add("<"+sr.Name+">");
GetFiles(Path+sr.Name); // 递归调用
}
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
}
BlueDeepOcean 2006-06-30
  • 打赏
  • 举报
回复
比如D盘下面A文件夹下面的所有文件:

TSearchRec sr;
TStringList *sl = new TStringList;
if (FindFirst(D:\\A\\*.*", faArchive, sr) == 0)
{
do
{
if (sr.Attr == faArchive)
sl->Add(sr.Name);
} while (FindNext(sr) == 0);
FindClose(sr);
}

for (int i = 0;i < sl->Count;i ++)
DeleteFile(sl->Strings[i]);
lexchou 2006-06-30
  • 打赏
  • 举报
回复
dir /a /s

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧