目录比较的问题(StringList对比)
工程内容:
通过程序手动同步局域网内某共享目录与本机目录的内容
目录内有多层子目录,包括2万多个文件,文件大小从1K-200M不等,部分文件名可能由中文开头
要求保证本机目录与源目录绝对相同,不得出现多余文件或目录,所有文件的修改时间与大小必须相同。
我的做法:
分两条线程分别遍历远程及本机目录
将结果以 “相对路径+文件名|修改时间|大小” 的格式存入两个TSTRINGLIST内
然后对两个STRINGLIST进行比较
然后根据比较结果进行相应的文件复制或者删除操作
现在问题卡在STRINGLIST的比较上面,一直找不到合适的算法,希望大家出出主意
在此先谢过了,分不够的话另开帖再加
[解决办法]
完全没有毕要这么做,用StringList反而慢。
FileInfo=recored
FileName:string;
FileTime:TFileTime;
FileSize:int64;
end;
FileSearth=Class
public
procedure Add(FilePath:string);
Delete(FilePath:string);
private
Files:array of FileInfo;
end;
//---------
Stringlist有太多功能你是用不上的,但是为了兼容这些功能会拖慢你的速度。
特别是indexOf函数,它会遍历整个list里的数据至到找到你需要的值为止。对于两三万条数据用这个函数真是恶梦。
我写过网吧里用的对比更新软件,用的是单线程的、纯Delphi7无任何第三方控件。如果你需要我出售给你,300元。带一个游戏菜单。
[解决办法]
比較文件是否相同需要使用某種diff算法.
光比效文件大小,時間是不准確的.
更新時為了效率考量, 最好只傳輸修改部份.
[解决办法]
存到数据库来比较吧
记得给文件名字段加索引
StringList太吃内存
[解决办法]
非要用TStrings的话,可以用IniFiles单元的THashStringList(TStrings的子类),不过得说明,这些全都不支持Unicode。
[解决办法]
可以用TList来做,比较之前,至少先对一边排好序。这样查找的时候速度快。另一边可以不排序