搜索并拷贝文件问题!(200分)

  • 主题发起人 主题发起人 chl720
  • 开始时间 开始时间
C

chl720

Unregistered / Unconfirmed
GUEST, unregistred user!
比如我电脑里有个 35892479 的 QQ 文件夹。
我不知道他装在那里,但一定有,
我怎样才能找到他,并复制其中的 msgex.db 文件 到相应的文件夹里!

希望大家能帮看看!
谢谢!11
 
如果有两个这样的文件夹需要拷贝两个文件到不同的文件夹,
如果嫌分给得少可以再加的!
 
那且不是要遍历机器的的所有文件了,
 
到注册表中找到QQ的安装目录,再搜索这个目录不就 OK了
 
是不是很麻烦!兄弟们都帮忙看看!!谢谢,非常重要的
 
不麻烦,搜索目录用FindFirstFile和FindNextFile两个函数,拷贝文件用CopyFile函数,简单的很,核心就3个函数,你自己组合下就OK了。给你个简单的代码参考:
procedure TXXXXXXX.SearchLocalMusicFile(const Dir, FilesFilter: string;
SearchSubDir: Boolean);
var
SearchRec: TSearchRec;
begin
if FindFirst(Dir + FilesFilter, faAnyFile, SearchRec) = 0 then
try
repeat
if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
begin
Application.ProcessMessages;
if (SearchRec.Attr and faDirectory) > 0 then
begin
if SearchSubDir then
SearchLocalMusicFile(IncludeTrailingPathDelimiter(Dir + SearchRec.Name),
FilesFilter, SearchSubDir);
end
else
begin
if FAbortSearchLocal then Abort;
SetSearchStatusText(Dir + SearchRec.Name);
if AcceptFileToAdd(SearchRec.Name, cbbSearchLocalFileType.ItemIndex) then
AddSearchLocalFileToListView(Dir + SearchRec.Name);
end;
end;
until FindNext(SearchRec) <> 0;
finally
FindClose(SearchRec);
end;
end;
 
TO :zqw0117

谢谢你的帮助,你能不能做个简单的例子给我看看!
我对函数不是很了解的!
 
在IDE中,双击某个函数(这样该函数就是高亮显示了,表示选中它),按F1,可看到该函数的调用参数,返回值,注意事项(某些函数还有调用例子)的说明,可借助金山词霸等软件就能看懂。自己动手,才会进步,总是要别人写代码,你永远都不能走出菜鸟的范畴。
 
谢谢!只是我现在很急用!就这两天有机会了!!
自己动手,才会进步,总是要别人写代码,你永远都不能走出菜鸟的范畴。
这个我是很有体会的!
 
给你简单解释下代码含义吧:
procedure TXXXXXXX.SearchLocalMusicFile(const Dir, FilesFilter: string;
SearchSubDir: Boolean);
var
SearchRec: TSearchRec;
begin
if FindFirst(Dir + FilesFilter, faAnyFile, SearchRec) = 0 then //查找目录和文件,如果找到,进入then后面执行
try
repeat //循环
if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then //如果不是本目录和父目录,继续
begin
Application.ProcessMessages;//防止锁死界面
if (SearchRec.Attr and faDirectory) > 0 then //如果找到的是目录的话
begin
//这里你可以判断下SearchRec.Name的值,如果是35892479,则说明当前这个目录就是你要找的目录,接下来做你的文件拷贝吧。
if SearchSubDir then //如果参数SearchSubDir是真的话,递归搜索子目录
SearchLocalMusicFile(IncludeTrailingPathDelimiter(Dir + SearchRec.Name),
FilesFilter, SearchSubDir);
end
else
begin
{if FAbortSearchLocal then Abort;
SetSearchStatusText(Dir + SearchRec.Name);
if AcceptFileToAdd(SearchRec.Name, cbbSearchLocalFileType.ItemIndex) then
AddSearchLocalFileToListView(Dir + SearchRec.Name);}
这一段代码都是处理文件的,也就是说,当前SearchRec.Name是一个文件,而不是目录。按照你的需求,这部分可以不要(因为你只需要找当前目录)
end;
end;
until FindNext(SearchRec) <> 0; //继续找下一个,如果找不到,退出循环
finally
FindClose(SearchRec);//关闭占用的句柄资源。
end;
end;
如果你只希望找目录,可将第一句:
if FindFirst(Dir + FilesFilter, [red]faAnyFile[/red], SearchRec) = 0 then
的红色部分改成faDirectory,那么FindFirst将只会寻找目录,而忽略文件,大大加快查找速度。
祝你好运。
 
uses Registry;
-----------------
var
reg:TRegistry;
src_path,dst_path:String
begin
dst_path:='c:/msgex.db';//拷贝到目的文件夹
reg := Tregistry.Create;
with reg do
begin
RootKey := HKEY_CLASSES_ROOT;
if openkey('/CLSID/{2D616D8F-F1BA-43A1-BEF0-E2A82A0FBD56}/LocalServer32',false) then //取得QQ安装路径
begin
src_path := ExtractFilePath(ReadString(''));//获得源文件夹的位置
CopyFile(Pchar(src_path+'35892479/msgex.db'),Pchar(dst_path),False);//拷贝文件
end;
end;
end;
 
接受答案了.
 
to xfast
用你的方法 出现如下问题:运行到:
CopyFile( src_path+'35892479/msgex.db',dst_path,False);
[Error] Unit1.pas(39): Incompatible types: 'String' and 'PAnsiChar'
[Error] Unit1.pas(45): '.' expected but ';' found
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部