怎样实现按条件删除文件夹?(50分)

  • 主题发起人 主题发起人 sy_luoping
  • 开始时间 开始时间
S

sy_luoping

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟现有一事请教,就是我的目录里的子目录是按日期创建的,怎样我能按日期删除这些子目录?如有实例,小弟万分感谢!!送上多分。。
 
能确定文件夹的名字吗?
搞个循环,把文件名放在一个list里面,再执行下面的
If FileExists(文件名) then
DeleteFile(pFileName);
 
文件夹的名字就是日期,怎样把所有文件夹都放到list里面?
 
procedure EnumFolderContent(Folder:string;lstResult:TStrings);
var
hFind:THandle;
AData:WIN32_FIND_DATA;
FindRet:Boolean;
begin
lstResult.Clear;
hFind:=Windows.FindFirstFile(PAnsiChar(Folder),AData);
FindRet:=hFind<>INVALID_HANDLE_VALUE;
while FindRet do
begin
if ((AData.dwFileAttributes and Windows.FILE_ATTRIBUTE_DIRECTORY)>0)
and (AData.cFileName[0]<>'.') then
lstResult.Add(AData.cFileName);
FindRet:=Windows.FindNextFile(hFind,AData);
end;
Windows.FindClose(hFind);
end;

比如要枚举D:/下所有的目录 请调用EnumFolderContent('D:/*.*',……)
 
楼上的兄弟,按照你的方法,只能查找到一个文件夹,我的需求是查找所有文件夹,不是文件。
 
这么弱的问题在这问 没骂你就好了。递归也不懂就别问了 直接花钱请人搞。应该是“只能枚举出一层”而不是“只能找到一个文件夹”吧?看来语文也没学好。文理皆差 可以去撞墙了。怎么死那么多无辜的四川人民没死了你?
 
楼上的大虾,小弟是刚学的,所以有些问题没有说明白,请见谅。对,现在的问题是能枚举到一层,请大虾帮忙,能告诉我怎么样枚举多层吗?谢谢了!!
 
貌似我回答过楼主查找所以文件的贴了,那段代码改下就行了啊
 
对,楼上的大哥,你给我发的确实好用,但我就不知道怎样改啊,因为是两个功能,一个是查找所有文件,一个是查找所有文件夹。我要按照条件删除文件夹。请回帖!!谢谢!!
 
修改星号那一段
调用方式:
第二原来是文件名 直接用文件夹名就行了

function TForm1.SearchFile(mainpath, filename: string;
var foundresult: TStrings): Boolean;
var
i:Integer;
Found:Boolean;
subdir1:TStrings;
searchRec:TSearchRec;
s:string;
begin
Found:=false;
if trim(filename)<>'' then
begin
subdir1:=TStringList.Create;
if (FindFirst(mainpath+'*.*',faDirectory,searchRec)=0) then
begin
if IsValidDir(SearchRec) then
subdir1.Add(SearchRec.Name);
while (FindNext(SearchRec)=0 ) do
begin
if IsValidDir(SearchRec) then
subdir1.Add(SearchRec.Name);
end;
end;
FindClose(SearchRec);
***********************************************************************
if (copy(mainpath,length(mainpath)-length(filename),length(filename)=filename) then
begin
Found:=true;
foundresult.Add(mainpath);
end;
************************************************************************
for i:=0 to subdir1.Count-1 do
found:=SearchFile(mainpath+subdir1.Strings+'/',FileName,foundresult);
subdir1.Free;
end;
result:=found;
end;
 
楼上的大哥,如果按照你的方法,就能查找出所有子目录吧,还是找某一个目录??
 
所有目录
可以就结帖,给分
等待
 
我刚才实验了下,提示类型不匹配,就是if (copy(mainpath,length(mainpath)-length(filename),length(filename)=filename) then。帮看下。
 
晕,我是OK了才发给你的,调用问题
调用如下
procedure TForm1.Button1Click(Sender: TObject);
var
s:TStrings;
begin
s:=TStringList.Create;
SearchFile(edit1.Text,edit2.Text,s); //edit1.text d:/(路径) edit2.text sun(文件夹名)
ListBox1.Items.AddStrings(s);
s.Free;
end;
 
不对啊,我还没有调用呢,只是提示类型不匹配,字符串和整形。
 
靠 少个括号啊 连续两个
if (copy(mainpath,length(mainpath)-length(filename),length(filename)***)***=filename) then。
 
似乎连续的括号被过滤了,没注意这点
不过这种简单调试问题
楼主也太懒了吧
 
大哥,麻烦再问下,我调用的时候,第一个参数给的是初级目录的路径,第二个参数怎样给才能查找到子目录下的所有目录呢???
 
比如在D盘下查找test文件夹
那么 d:/ test ...

这样就可以找到D盘下的所有test文件夹了?

你用了没?

问的比较晕
 
我已经用了,我的意思是查找目录下的所有文件夹,文件夹不固定啊。只要把所有文件夹都查找出来就可以了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部