请教各位:
在当前目录下,有多个文件,如何根据其文件名(取其关键字),将带有关键字的系列文件分到(复制到)其他各自不同的目录下?
如:d:\test目录下有“2008年食品安全调查表1.doc”,“2008年食品安全调查表2.doc”,“2008年食品质量调查表.doc”和“2008年食品卫生调查表.doc”三个报表文件;
能否分别根据其文件名的关键字如“2008年食品安全”、“2008年食品质量”和“2008年食品卫生”将他们自动分到三个目录:“食品安全”“食品质量”和“食品卫生”下?
“2008年食品安全调查表1.doc”,“2008年食品安全调查表2.doc”文件 自动分配到“食品安全”目录中;
“2008年食品质量调查表.doc”文件 自动分配到“食品质量”目录中;
“2008年食品卫生调查表.doc”文件 自动分配到“食品卫生”目录中;那位能给看看,帮帮忙。拜托。。谢了
在当前目录下,有多个文件,如何根据其文件名(取其关键字),将带有关键字的系列文件分到(复制到)其他各自不同的目录下?
如:d:\test目录下有“2008年食品安全调查表1.doc”,“2008年食品安全调查表2.doc”,“2008年食品质量调查表.doc”和“2008年食品卫生调查表.doc”三个报表文件;
能否分别根据其文件名的关键字如“2008年食品安全”、“2008年食品质量”和“2008年食品卫生”将他们自动分到三个目录:“食品安全”“食品质量”和“食品卫生”下?
“2008年食品安全调查表1.doc”,“2008年食品安全调查表2.doc”文件 自动分配到“食品安全”目录中;
“2008年食品质量调查表.doc”文件 自动分配到“食品质量”目录中;
“2008年食品卫生调查表.doc”文件 自动分配到“食品卫生”目录中;那位能给看看,帮帮忙。拜托。。谢了
begin
if pos('食品安全',listbox.items[i])<>0 then
//文件拷贝至食品安全目录
else if pos('食品质量',listbox.items[i])<>0 then
//拷贝至食品质量目录
else if pos('食品卫生',listbox.items[i])<>0
//拷贝至食品卫生目录
end;
1.将目录名与目录路径放入结构体
2.遍历目录
3.移动文件type
TDirectory=record
DirName:string;
DirPath:string;
end;
procedure InitialRecord
var
Dir:TDirectory;
begin
.............
.............
.............
end;
procedure SearchDocFile(Path:String);
var
SearchRec: TSearchRec;
I:Integer;
begin
ChDir(ExtractFilePath(Path));
FindFirst(Path, faAnyFile, SearchRec);
repeat
if AnsiContainsText(SearchRec.Name,Dir.DirName) then
MoveFile(PChar(SearchRec.Name),PChar(Dir.DirPath)); //移动文件
until(FindNext(SearchRec)<>0);
FindClose(SearchRec);
end;
{给你一个简单的,想扩展什么功能自己研究吧!!!}
uses shellapi;procedure TForm1.Button1Click(Sender: TObject);
var
sr: TSearchRec;
begin
if FindFirst('D:\test\*.doc', faAnyFile, sr) = 0 then {只查找D:\test目录下的doc文件}
begin
repeat
if pos('食品安全',sr.Name)>0 then {对比文件名和关键了,然后复制}
CopyFile(pchar('D:\test\'+sr.Name+''),pchar('D:\食品安全\'+sr.Name+''),false) {false表示替换已存在的文件,ture为不替换}
else if pos('食品质量',sr.Name)>0 then {复制后可以用DeleteFile('文件路径')删除源文件}
CopyFile(pchar('D:\test\'+sr.Name+''),pchar('D:\食品质量\'+sr.Name+''),false)
else if pos('食品卫生',sr.Name)>0 then
CopyFile(pchar('D:\test\'+sr.Name+''),pchar('D:\食品卫生\'+sr.Name+''),false);
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;