delphi 删除指定目录 下 指定日期之前所有文件
2012-05-10 02:26
555 查看
前几天发现客户的 图片目录 已经超过 60G.。。。磁盘只有 63G.。。。
需要删除指定日期 之前的 所有 图片,保留最近20天左右的 图片
要是进目录来删,那是找死,虽然全部不是在同一个目录,但也有成千上万个子目录。找时间来删除肯定是白痴。
用bat? 虽然说可以,只不过,有时候删得相当离谱。
想来想去,只有弄个delphi exe来删除。 没想到,速度还蛮快的。又不卡。
程序界面简单如上
以下是相关源码
大概思路是,递归进入各个子目录。如果是目录,则进去子目录。如果不是,则直接进行比较日期之后,进行删除操作。
其中提取到 这个文件的准确创建日期这一块可能 费了点时间。就是不想直接用r.finddata 里头的东西。太烦人。
也没有多少技术,就是方便我自己罢了。
需要删除指定日期 之前的 所有 图片,保留最近20天左右的 图片
要是进目录来删,那是找死,虽然全部不是在同一个目录,但也有成千上万个子目录。找时间来删除肯定是白痴。
用bat? 虽然说可以,只不过,有时候删得相当离谱。
想来想去,只有弄个delphi exe来删除。 没想到,速度还蛮快的。又不卡。
程序界面简单如上
以下是相关源码
function tform1.listmypath(p:string;d:string):string; var r:TsearchRec; ret:integer; ds,d1,d2,d3:string; cdt,chkd:Tdatetime; begin ret:=findfirst(p+'\'+'*.*',faanyfile,r); while ret=0 do begin if r.attr=fadirectory then begin if (r.name<>'.') and (r.Name<>'..') then begin //logs.lines.add('正在进入目录:'+r.name+'进行文件检查....'); listmypath(p+'\'+r.name,d); end; end else begin ds:=p+'\'+r.name; cdt:=GetFilesTime(ds, 0); chkd:=strtodatetime(d); d1:=datetostr(cdt); d2:=datetostr(GetFilesTime(ds, 1)); d3:=datetostr(GetFilesTime(ds, 2)); if cdt<chkd then begin application.ProcessMessages; abc.text:='正在删除文件:'+r.name+',创建时间:'+d1; tcount:=tcount+1; deletefile(ds); end; end; ret:=findnext(r); end; findclose(r); end; function tform1.GetFilesTime(sFilename: String; Timetype: Integer): TDateTime; var ffd: TWin32FindData; dft: DWord; lft, Time: TFileTime; sHandle: THandle; begin sHandle:= Windows.FindFirstFile(PChar(sFileName), ffd); if (sHandle <>INVALID_HANDLE_VALUE) then begin case Timetype of 0: Time:= ffd.ftCreationTime; 1: Time:= ffd.ftLastWriteTime; 2: Time:= ffd.ftLastAccessTime; end; Windows.FindClose(sHandle); FileTimeToLocalFileTime(Time, lft); FileTimeToDosDateTime(lft, LongRec(dft).HI, LongRec(dft).Lo); Result:= FileDateToDateTime(dft); end else Result:= 0; end; procedure TForm1.btdelClick(Sender: TObject); var pat:string; pad:string; begin pat:=opa.Text; pad:=opd.Text; //用于比较的字符串。 logs.clear; logs.lines.add('正在查询 目录下 '+pat+' 所有文件'); if pad<>'' then begin listmypath(pat,pad); end; abc.text:='总计:'+inttostr(tcount)+'文件已删除!'; end;
大概思路是,递归进入各个子目录。如果是目录,则进去子目录。如果不是,则直接进行比较日期之后,进行删除操作。
其中提取到 这个文件的准确创建日期这一块可能 费了点时间。就是不想直接用r.finddata 里头的东西。太烦人。
也没有多少技术,就是方便我自己罢了。
相关文章推荐
- shell-删除目录下指定日期前的所有文件
- Windows API函数删除指定文件目录下所有内容vc6.0通过
- 删除指定目录下的所有.svn文件
- 删除指定目录下所有文件及目录
- 删除指定目录下的所有文件的java类
- Delphi 计算指定目录下所有文件的大小(遍历文件夹所有文件及目录)
- 删除指定目录下的所有文件的java类
- 删除指定目录下所有文件 可以用于指定清空缓存
- Linux下如何遍历指定目录下的所有文件并删除指定天数之前创建的文件
- linux 下pyhton 删除指定目录下所有的重复内容的文件
- windows api 实现删除指定目录下的所有文件(包括子文件夹下的所有文件)
- Delphi 目录及子目录所有文件删除
- 删除一个目录下的所有文件但保留一个指定文件
- 删除一个目录下的所有文件,但保留一个指定文件
- Java删除某一目录下指定后缀所有文件
- C# 获取指定目录下所有文件信息、删除文件、目录,移动目录,拷贝目录
- 删除目录下指定日期之前的文件命令
- Linux下如何遍历指定目录下的所有文件并删除指定天数之前创建的文件
- linux下递归删除目录下所有指定类型文件
- ASP.NET 删除指定目录下的所有文件和文件夹