16,748
社区成员
发帖
与我相关
我的任务
分享
OutXMLDOC:=TXMLDocument.Create(nil);
OutXMLDOC.XML.Clear;
OutXMLDOC.Active:=True;
OutXMLDoc.Encoding:='utf-8';
//根结点
Root:=OutXMLDOC.AddChild('Backup');
Root.Attributes['data']:=IncludeTrailingPathDelimiter(edtDirectory.Text) + edtFileName.Text+'.data';
time:=Now;
Root.Attributes['time']:=FormatDateTime('yyyy-mm-dd hh:nn:ss',time);
DirNode:=Root.AddChild('Dir');
DirNode.Attributes['Name']:=lstSelected.Items.Strings[i];
pSearchFile('D:\ABC');
//-------------------------
procedure pSearchFile(mPath: string);
var
vSearchRec:TSearchRec;
K:Integer;
begin
K:=FindFirst(mPath+'\*.*',faAnyFile,vSearchRec);
while K=0 do
begin
if (vSearchRec.Attr and faDirectory > 0) and (Pos(vSearchRec.Name,'..')=0) then
begin
//是目录则添加一个目录结点
DirNode:=DirNode.AddChild('Dir');
DirNode.Attributes['Name']:=mPath+'\'+vSearchRec.Name;
pSearchFile(mPath+'\'+vSearchRec.Name)
end
else if Pos(vSearchRec.Name,'..')=0 then
begin
//目录下的文件结点
FileNode:=DirNode.AddChild('File');
FileNode.Attributes['Name']:=mPath+'\'+vSearchRec.Name;
FileNode.Attributes['FileSize']:=IntToStr(FileSizeByName(mPath+'\'+vSearchRec.Name));
FileNode.Attributes['data']:=IncludeTrailingPathDelimiter(edtDirectory.Text) + edtFileName.Text+'.data';
FileNode.Attributes['LastWriteTime']:=GetFileTime(mPath+'\'+vSearchRec.Name);
end;
K:=FindNext(vSearchRec);
end;
FindClose(vSearchRec);
end; {pSearchFile}
<?xml version="1.0" encoding="utf-8" ?>
<Backup data="C:\Documents and Settings\Administrator\桌面\1.data" time="2009-07-13 10:07:21">
<Dir Name="D:\abc">
<Dir Name="D:\abc\1">
<File Name="D:\abc\1\1.txt" FileSize="0" data="C:\Documents and Settings\Administrator\桌面\1.data" LastWriteTime="2009-07-10 10:22:06" />
<Dir Name="D:\abc\2">
<File Name="D:\abc\2\2.txt" FileSize="0" data="C:\Documents and Settings\Administrator\桌面\1.data" LastWriteTime="2009-07-10 10:22:24" />
<File Name="D:\abc\abc.txt" FileSize="0" data="C:\Documents and Settings\Administrator\桌面\1.data" LastWriteTime="2009-07-10 10:22:32" />
</Dir>
</Dir>
</Dir>
</Backup>
-------------------------------------
出来是这样的结果,而我想要的结果是:
-------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<Backup data="C:\Documents and Settings\Administrator\桌面\1.data" time="2009-07-13 10:07:21">
<Dir Name="D:\abc">
<Dir Name="D:\abc\1">
<File Name="D:\abc\1\1.txt" FileSize="0" data="C:\Documents and Settings\Administrator\桌面\1.data" LastWriteTime="2009-07-10 10:22:06" />
</Dir>
<Dir Name="D:\abc\2">
<File Name="D:\abc\2\2.txt" FileSize="0" data="C:\Documents and Settings\Administrator\桌面\1.data" LastWriteTime="2009-07-10 10:22:24" />
</Dir>
<File Name="D:\abc\abc.txt" FileSize="0" data="C:\Documents and Settings\Administrator\桌面\1.data" LastWriteTime="2009-07-10 10:22:32" />
</Dir>
</Backup>
procedure pSearchFile(mPath: string);
var
vSearchRec:TSearchRec;
K:Integer;
begin
K:=FindFirst(mPath+'\*.*',faAnyFile,vSearchRec);
while K=0 do
begin
if (vSearchRec.Attr and faDirectory > 0) and (Pos(vSearchRec.Name,'..')=0) then
begin
//是目录则添加一个目录结点
DirNode:=DirNode.AddChild('Dir');
DirNode.Attributes['Name']:=mPath+'\'+vSearchRec.Name;
pSearchFile(mPath+'\'+vSearchRec.Name)
end
else if Pos(vSearchRec.Name,'..')=0 then
begin
//目录下的文件结点
FileNode:=DirNode.AddChild('File');
FileNode.Attributes['Name']:=mPath+'\'+vSearchRec.Name;
FileNode.Attributes['FileSize']:=IntToStr(FileSizeByName(mPath+'\'+vSearchRec.Name));
FileNode.Attributes['data']:=IncludeTrailingPathDelimiter(edtDirectory.Text) + edtFileName.Text+'.data';
FileNode.Attributes['LastWriteTime']:=GetFileTime(mPath+'\'+vSearchRec.Name);
end;
K:=FindNext(vSearchRec);
end;
FindClose(vSearchRec);
end; {pSearchFile}