某文件夹下有几万个文件,现在要每隔5分钟一次删除其中日期早于某天而且其文件名在数据库黑名单上的100个文件.因为某种原因不能使用遍历文件夹的方法.怎样删除? 给出算法即可.
另外问:怎样使目录下的文件按照时间排序?

解决方案 »

  1.   

    如果你的文件命名有规律的话,可以根据你的条件直接列出要删除的文件名然后通过循环DeleteFile(空删也不会报错)按时间排序可以参考这个函数:function TForm1.FGetFileTime(sFileName: string;
              TimeType: Integer): TDateTime;
    var
       ffd:TWin32FindData;
       dft:DWord;
       lft,Time:TFileTime;
       H:THandle;
    begin
         H:=Windows.FindFirstFile(PChar(sFileName),ffd);
         case  TimeType of
               0: Time:=ffd.ftCreationTime;
               1: Time:=ffd.ftLastWriteTime;
               2: Time:=ffd.ftLastAccessTime;
         end;     //获取文件信息
         if (H <> INVALID_HANDLE_VALUE) then
         begin
              Windows.FindClose(H);
              //转换FILETIME格式成为local  FILETIME格式
              FileTimeToLocalFileTime(Time,lft);
              //转换FILETIME格式成为DOStime格式
              FileTimeToDosDateTime(lft,LongRec(dft).Hi,LongRec(dft).Lo);
              //最后,转换DOStime格式成为Delphi's应用的TdateTime格式
              Result:=FileDateToDateTime(dft);
         end
         else
             result:=0;
    end;
      

  2.   

    算法:FindFirst得到第一个文件->FGetFileTime得到文件的create时间->do 1000次 findnext(删除符合条件的文件)->Findclose
    该算法的问题:如果文件没按照时间排序,那么如果前面1000个文件都不符合删除条件那就完蛋了.
    问题中忘了说:如果文件产生时间在15天前的则无条件删除
      

  3.   

    文件是在liunix系统下产生然后通过Omni-NFS Server传过来的,所以很多手段无法实施.如果可以写数据库的话那还不如连文件也写入数据库了