遍历下面的这个函数就可以了: procedure DirToTreeView(Tree: TTreeView; Directory: string; Root: TTreeNode; IncludeFiles: Boolean); var SearchRec : TSearchRec; ItemTemp : TTreeNode; begin with Tree.Items do try BeginUpdate; if Directory[Length(Directory)] <> '\' then Directory := Directory + '\'; if FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0 then begin repeat if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] <> '.') then begin if (SearchRec.Attr and faDirectory > 0) then Root := AddChild(Root, SearchRec.Name); ItemTemp := Root.Parent; DirToTreeView(Tree, Directory + SearchRec.Name, Root, IncludeFiles); Root := ItemTemp; end else if IncludeFiles then if SearchRec.Name[1] <> '.' then AddChild(Root, SearchRec.Name); until FindNext(SearchRec) <> 0; FindClose(SearchRec); end; finally EndUpdate; end; end;
jinjazz(近身剪(N-P攻略)又是第一! 另创建日期也可以从SearchRec中得来: TSearchRec = record Time: Integer; Size: Integer; Attr: Integer; Name: TFileName; ExcludeAttr: Integer; FindHandle: THandle; FindData: TWin32FindData; end; Size 文件大小 in bytes. Name 文件名(含扩展名) FindHandle is an internal handle used to track find state. FindData 文件创建时间,最后修改时间等等
{请慎重调试~~损失自负}uses FileCtrl, dateutils; {$R *.dfm}procedure DelFiles(Directory: string); var SearchRec: TSearchRec; begin try if Directory[Length(Directory)] <> '\' then Directory := Directory + '\'; if FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0 then begin repeat if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] <> '.') then begin if (SearchRec.Attr and faDirectory > 0) then DelFiles(Directory + SearchRec.Name); end else if SearchRec.Name[1] <> '.' then begin {删除30天之前的文件} if DaysBetween(now, filedatetodatetime(SearchRec.Time)) > 30 then if messagedlg('删除文件' + Directory + SearchRec.Name, mtwarning, [mbyes, mbno], 0) = mryes then DeleteFile(Directory + SearchRec.Name); end; until FindNext(SearchRec) <> 0; FindClose(SearchRec); end; finally end; end;
测试~~建立一个目录,把以前没用的文件以及目录剪切几个近来,另外新创建几个文件 ~~~~ procedure TForm1.Button1Click(Sender: TObject); begin DelFiles('E:\test'); end;
procedure DirToTreeView(Tree: TTreeView; Directory: string; Root: TTreeNode; IncludeFiles:
Boolean);
var
SearchRec : TSearchRec;
ItemTemp : TTreeNode;
begin
with Tree.Items do
try
BeginUpdate;
if Directory[Length(Directory)] <> '\' then Directory := Directory + '\';
if FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0 then
begin
repeat
if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] <> '.') then
begin
if (SearchRec.Attr and faDirectory > 0) then
Root := AddChild(Root, SearchRec.Name);
ItemTemp := Root.Parent;
DirToTreeView(Tree, Directory + SearchRec.Name, Root, IncludeFiles);
Root := ItemTemp;
end
else if IncludeFiles then
if SearchRec.Name[1] <> '.' then
AddChild(Root, SearchRec.Name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
finally
EndUpdate;
end;
end;
另创建日期也可以从SearchRec中得来:
TSearchRec = record
Time: Integer;
Size: Integer;
Attr: Integer;
Name: TFileName;
ExcludeAttr: Integer;
FindHandle: THandle;
FindData: TWin32FindData;
end;
Size 文件大小 in bytes.
Name 文件名(含扩展名)
FindHandle is an internal handle used to track find state.
FindData 文件创建时间,最后修改时间等等
{$R *.dfm}procedure DelFiles(Directory: string);
var
SearchRec: TSearchRec;
begin
try
if Directory[Length(Directory)] <> '\' then
Directory := Directory + '\';
if FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0 then
begin
repeat
if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1]
<> '.') then
begin
if (SearchRec.Attr and faDirectory > 0) then
DelFiles(Directory + SearchRec.Name);
end
else if SearchRec.Name[1] <> '.' then
begin
{删除30天之前的文件}
if DaysBetween(now, filedatetodatetime(SearchRec.Time)) > 30 then
if messagedlg('删除文件' + Directory + SearchRec.Name, mtwarning,
[mbyes, mbno], 0) = mryes then
DeleteFile(Directory + SearchRec.Name);
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
finally
end;
end;
~~~~
procedure TForm1.Button1Click(Sender: TObject);
begin
DelFiles('E:\test');
end;