取得一个文件夹下的文件,并保存在一个文件中.

本文介绍了一种将文件时间转换为日期时间的方法,并提供了一个获取文件相对于当前路径的相对路径的函数。此外,还详细解释了如何遍历目录并获取指定路径下所有文件的列表,包括文件的完整路径及最后修改时间。
 //文件时间转DateTime
function   FileTimeToDateTime(const   AFileTime:TFileTime):TDateTime;
var
    SYSTime:TSystemTime;
begin
    if   FileTimeToSystemTime(AFileTime,SYSTime)   then
        Result:=SystemTimeToDateTime(SYSTime)
    else   Result:=0;
end;

function   PathRelativePathTo(pszPath:LPSTR;   pszFrom:LPCSTR;   dwAttrFrom:DWORD;
    pszTo:LPCSTR;   dwAttrTo:DWORD):BOOL;   stdcall;
    external   "shlwapi.dll "   name   "PathRelativePathToA ";

//取得相对路径
function   GetFileRelativePath(CurPath:string;   const   Dest:string;   const   NoDot:Boolean=False):string;
var
    ResultPath:   array[0..1024]   of   Char;//路径转换结果
begin
    CurPath:=ExtractFileDir(CurPath)+ " ";
    if   PathRelativePathTo(ResultPath,   PChar(CurPath),   FILE_ATTRIBUTE_DIRECTORY,
          PChar(Dest),   FILE_ATTRIBUTE_DIRECTORY)   then
    begin
        Result   :=   ResultPath;
        if   NoDot   then
            Result:=Copy(Result,3,Length(Result)-2);
    end
    else
        Result   :=   Dest;
end;

//得到文件列表
procedure   GetFileList(const   aDir,aFilter:string;   const   FileName:TFileName;AbSolutePath:Boolean=True;Recursion:Boolean=False);
{aDir:文件路径.   aFilter:通配符(所有文件则*.*).FileName:输出文件名;AbSolutePath:使用绝对路径;Recursion:是否递归搜索}
var
    aList:TStringList;

    procedure   AddFiles(TmpDir:string);
    var
        SR:TSearchRec;
        Dir:string;
        FileDir:string;
    begin
        Dir:=IncludeTrailingPathDelimiter(TmpDir);
        if   AbSolutePath   then
            FileDir:=Dir
        else   FileDir:=GetFileRelativePath(IncludeTrailingPathDelimiter(aDir),Dir,True);
        if   FindFirst(Dir+aFilter,faAnyFile,SR)=0   then
        begin
            repeat
                if   (SR.Name < > ". ")   and   (SR.Name < > ".. ")   then
                begin
                    if   SR.Attr=faDirectory   then
                    begin
                        if   Recursion   then
                            AddFiles(Dir+SR.Name);
                    end
                    else
                        aList.Add(FileDir+SR.Name+#9#9+
                            FormatDateTime( "yyyy-mm-dd   hh:nn:ss ",FileTimeToDateTime(SR.FindData.ftLastWriteTime)));
                end;
            until   FindNext(SR) < >0;
            SysUtils.FindClose(SR);
        end;
    end;
begin
    aList:=TStringList.Create;
    try
        AddFiles(aDir);
        aList.SaveToFile(FileName);
    finally
        aList.Free;
    end;
end;

//使用方法:
procedure   TForm1.btn2Click(Sender:   TObject);
begin
    //文件保存在D:/abc.txt
    GetFileList(Edit1.Text, "*.* ", "D:/abc.txt ",chkbx2.Checked,chkbx1.Checked);
end;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值