1,183
社区成员
发帖
与我相关
我的任务
分享
function DirectoryToXml(FullPath:string):Boolean;// 根据文件夹创建一个包含它里面所有内容(子文件夹和文件名)的XML文件
var
Root:IXMLNode; //根节点
DirNode:IXMLNode; //目录节点
FileNode:IXMLNode; //文件节点
OutXMLDOC:TXMLDocument;
i:Integer;
time:TDateTime;
procedure pSearchFile(mPath: string); //查询文件生成xml结构
var
vSearchRec:TSearchRec;
K:Integer;
ItemTemp:IXMLNode; //中转node,用来保存当前目录的父结点
begin
K:=FindFirst(mPath+'\*.*',faAnyFile,vSearchRec);
while K=0 do
begin
Application.ProcessMessages;
if IsDirOrFile(vSearchRec.Name,vSearchRec.Attr)=1 then
begin
DirNode:=DirNode.AddChild('Dir');
DirNode.Attributes['Name']:=mPath+'\'+vSearchRec.Name;
ItemTemp := DirNode.ParentNode;
pSearchFile(mPath+'\'+vSearchRec.Name);
DirNode:= ItemTemp;
end
else if IsDirOrFile(vSearchRec.Name,vSearchRec.Attr)=2 then
begin
FileNode:=DirNode.AddChild('File');
FileNode.Attributes['Name']:=mPath+'\'+vSearchRec.Name;
try
FileNode.Attributes['FileSize']:=IntToStr(FileSizeEx(mPath+'\'+vSearchRec.Name)); //文件大小
except
on E: Exception do
begin
Result:=False;
Application.MessageBox(PChar(E.Message+#13#10+'The operation is going to disrupt,please click "OK" to exit.'), 'Registry Easy', MB_ICONWARNING);
Exit;
end;
end;
//FileNode.Attributes['FtpUser']:=IdFTP1.Username;
FileNode.Attributes['ModifiedDate']:=GetFileTime(mPath+'\'+vSearchRec.Name); //文件最后修改时间
FileNode.Attributes['MD5']:=RivestFile(mPath+'\'+vSearchRec.Name); //md5码
end;
K:=FindNext(vSearchRec);
end;
FindClose(vSearchRec);
end;
begin
Result:=True;
OutXMLDOC:=TXMLDocument.Create(nil);
OutXMLDOC.XML.Clear;
OutXMLDOC.Active:=True;
OutXMLDoc.Encoding:='utf-8';
Root:=OutXMLDOC.AddChild('Backup');
//添加根节点属性
//root.Attributes['FtpUser']:=IdFTP1.Username;
time:=Now;
Root.Attributes['time']:=FormatDateTime('yyyy-mm-dd hh:nn:ss',time);
DirNode:=Root.AddChild('Dir');
DirNode.Attributes['Name']:=FullPath;
pSearchFile(FullPath);
OutXMLDoc.SaveToFile('localWordFolder.tsk');
OutXMLDOC:=nil;
end;