如何获取一个目录下所有文件、目录以及其子目录下所有文件的文件名?

yifei1900 2003-03-31 06:27:56
最近想做一个清除Windows垃圾的小东东,
我都已经知道了哪些文件夹下有垃圾,
但苦于不知道:
如何获取一个目录下所有文件、目录以及其子目录下所有文件的文件名?
请高手赐教。
...全文
187 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gary_jojo 2003-04-01
  • 打赏
  • 举报
回复
我学.
xc2927 2003-04-01
  • 打赏
  • 举报
回复
学习
devie 2003-04-01
  • 打赏
  • 举报
回复
这是一个删除所有目录及文件的函数,你改动一下就可以了
bool Tzhu::deldir(char * dir_fullpath) // 删除指定的目录
{
char dir[260];
char filename[260];
int len = 0;
int ch = '\\';

strcpy(dir, dir_fullpath);

len = strlen(dir);

char *temp = strrchr(dir, ch);
if(len < 4 || temp == NULL) // 可能为磁盘根目录或者不是有效的目录路径
return false;
if(temp != NULL)
{
if((temp - dir + 1) != len) // 在目录后添加'\'
strcat(dir, "\\");
}

GetCurrentDirectory(260, filename);
strcat(filename, "\\");
if(strcmp(dir, filename) == 0) // 如果要删除的目录是当前目录
{
strcat(filename, "..");
SetCurrentDirectory(filename); // 改变当前目录
}

WIN32_FIND_DATA finddata;
HANDLE fFile;
bool flag;

strcpy(filename, dir);
strcat(filename, "*.*");
fFile=FindFirstFile(filename, &finddata);
flag=true;

if(fFile!=INVALID_HANDLE_VALUE) // 此目录不是空目录
{
BOOL bfind = true;
while(bfind)
{
if(finddata.cFileName[0] != '.')
{
strcpy(filename, dir);
strcat(filename, finddata.cFileName);
if(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{ // 删除找到的子目录
strcat(filename, "\\");
flag = flag && deldir(filename);
}
else
{ // 删除找到的文件
SetFileAttributes(filename, FILE_ATTRIBUTE_NORMAL);
flag = flag && DeleteFile(filename);
}
}
bfind = FindNextFile(fFile, &finddata);
}
FindClose(fFile);
}
if(flag)
{
SetFileAttributes(dir_fullpath, FILE_ATTRIBUTE_NORMAL);
if(RemoveDirectory(dir_fullpath))
return true;
}
return false;
}
mme 2003-04-01
  • 打赏
  • 举报
回复
在bcb的example文件中有个例子,可以参考
yifei1900 2003-04-01
  • 打赏
  • 举报
回复
那么,再请教一下
Windows产生垃圾的文件夹有些是系统文件夹,如:Recent,Temporary Internet Files之类的,系统有没有什么API之类的,可以调用,然后来清除这些系统文件夹啊?
谢谢。
wwei07 2003-03-31
  • 打赏
  • 举报
回复
FindDir("c:\\","*");

//---------------------------------------------------------------------------
void __fastcall TForm1::FindDir(AnsiString sPath,AnsiString sFileName)
{
TSearchRec sr;
AnsiString sFullFileName = sPath + "\\" + sFileName;
int iAttributes1 = faDirectory;
int iAttributes2 = 0;


if (FindFirst(sPath+"\\*.*",iAttributes,sr)==0)
{
StatusBar1->SimpleText = (sPath + sr.Name);
if(sr.Attr == iAttributes2)
if(sr.Name == sFileName)
{
iScanCount++;
Memo1->Lines->Add(sFullFileName);
}
if(sr.Attr == faDirectory)
{
if(sr.Name !="."&&sr.Name !="..")
{
FindDir(sPath+"\\"+sr.Name,sFileName);
}
}
}
while (FindNext(sr)==0)
{
StatusBar1->SimpleText = (sPath + sr.Name);

if(sr.Attr == iAttributes2)
if(sr.Name == sFileName)
{
iScanCount++;
Memo1->Lines->Add( sFullFileName);
}
if(sr.Attr == faDirectory)
{
if(sr.Name!="."&&sr.Name!="..")
{
FindDir(sPath+"\\"+sr.Name ,sFileName);
}
}
}
FindClose(sr);
}
JerryGR 2003-03-31
  • 打赏
  • 举报
回复
FindFirstFile
FindNextFile
FindFile
CloseHandle
IsFolder
还有什么函数,记不太清楚了
你到MSDN中找找是不是有这样的函数
然后写一个递归程序就可以了

13,822

社区成员

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

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