unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,FileCtrl,ShellAPI;
type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; countd,countf:integer; sum:integer; implementation
{$R *.dfm} //调用方法:ShellFileOperation('c:/afile.txt', 'd:/afile2.txt', FO_COPY); FO_MOVE procedure ShellFileOperation(fromFile: string; toFile: string; Flags: Integer); var shellinfo: TSHFileOpStructA; begin with shellinfo do begin wnd := Application.Handle; wFunc := Flags; pFrom := PChar(fromFile); pTo := PChar(toFile); end; SHFileOperation(shellinfo); end;
// Example, Beispiel:
function RenDirectory(const OldName,NewName:string): boolean; var fo: TSHFILEOPSTRUCT; begin FillChar(fo, SizeOf(fo), 0); with fo do begin Wnd := 0; wFunc := FO_RENAME; pFrom := PChar(OldName+#0); pTo := pchar(NewName+#0); fFlags := FOF_NOCONFIRMATION+FOF_SILENT; end; Result := (SHFileOperation(fo) = 0); end;
procedure search(dir:string); var targetpath:string;{目标路径名} sr:TsearchRec; begin {第一阶段:找出初始dir目录下的所有文件, 其中dir变量值由edit1的Text属性确定} targetpath:=extractfilepath(dir);{分解出目标路径名} if findfirst(dir,faanyfile,sr)=0 then repeat if((sr.name<>'.')and(sr.name<>'..'){排除父目录和本目录两个假文件} and((filegetattr(targetpath+sr.name)and fadirectory)<>fadirectory)){只取文件} then begin sum:=sum+1;
RenameFile(targetpath+sr.name, targetpath+inttostr(sum));
countf:=countf+1; end until findnext(sr)<>0; if findfirst(dir,faanyfile,sr)=0 then repeat if((sr.name<>'.')and(sr.name<>'..')){排除父目录和本目录两个假文件} and((filegetattr(targetpath+sr.name)and fadirectory)=fadirectory){排除文件} then begin sum:=sum+1; RenDirectory(targetpath+sr.name, targetpath+inttostr(sum)); search(targetpath+inttostr(sum)+'/*.*');{递归调用} //search(targetpath+sr.name+'/*.*');{递归调用}
countd:=countd+1; end until findnext(sr)<>0; end;
procedure TForm1.Button1Click(Sender: TObject); var curpath,S: string; dt:TDateTime; fdt:double; begin S := ''; if SelectDirectory('选择要修改名字的文件夹', '', S) then begin countf:=0; countd:=0; randomize; sum:= 10000+Random(1000000-10000+1); ; search(s);{调用Search()函数} showmessage('共更改目录:'+inttostr(countd)+' 个,文件:'+inttostr(countf)+' 个') end; end;
end. //RenameFile('Oldname', 'Newname'); //CopyFile(PChar('Oldname'), PChar('Newname'), False); //MoveFile(PChar('Oldname'), PChar('Newname'));
|
请发表评论