修改测试,没有问题;可能是你其它设置的有问题,仔细找找吧。//首先建i个文件夹 ,我的测试数据分别是2000和10000,当到10000的时候是慢,但是功能也完成。 procedure TForm1.Button2Click(Sender: TObject); var i:Integer; begin for i := 1 to 10000 do ForceDirectories('C:\Rename\' + IntToStr(i)); end;procedure TForm1.Button1Click(Sender: TObject); var sr : TSearchRec; const s = 'c:\Rename'; //把所有要改名的都放在这个文件夹下,根据你的情况修改。 begin if DirectoryExists(s) then begin if FindFirst(s+'\*.*', faAnyFile, sr) = 0 then begin repeat if (sr.Attr and faAnyFile) = sr.Attr then begin if (sr.Attr=faDirectory) and (sr.Name<>'.') and (sr.Name<>'..') then RenameFile(s+'\'+sr.Name, s+'\SH-'+ sr.Name); end; until FindNext(sr) <> 0 end; FindClose(sr); end; end;我上班不让用聊天工具。
其实不是文件的多少的问题,是和文件名有关,我把文件的属性改成存档的,FindNext自然就找不到。具体还上面的FindNext怎么会又找到该名后的文件不知道什么原因。希望高手路过解释一下。procedure TForm1.Button1Click(Sender: TObject); var sr : TSearchRec; const s = 'c:\gyj\'; //把所有要改名的都放在这个文件夹下,根据你的情况修改。 begin if DirectoryExists(s) then begin if FindFirst(s+'*.*', faDirectory , sr) = 0 then begin repeat if (sr.Attr and faDirectory ) = sr.Attr then begin if (sr.Name<>'.') and (sr.Name<>'..') then begin FileSetAttr(s+sr.Name,faArchive); RenameFile(s+sr.Name,s+'SH-'+ sr.Name ); end; end; until FindNext(sr) <> 0 end; FindClose(sr); end; end;
这下可以,不过我不明白原来的错误原因。 procedure TForm1.Button1Click(Sender: TObject); var sr : TSearchRec; ts : TStringList; i : Integer; const s = 'c:\gyj\'; //把所有要改名的都放在这个文件夹下,根据你的情况修改。 begin if DirectoryExists(s) then begin ts := TStringList.Create; try if FindFirst(s+'*.*', faDirectory , sr) = 0 then begin repeat if (sr.Attr and faDirectory ) = sr.Attr then begin if (sr.Name<>'.') and (sr.Name<>'..') then ts.Add(sr.Name); end; until FindNext(sr) <> 0 end; FindClose(sr); if ts.Count > 0 then for i := 0 to ts.Count - 1 do if DirectoryExists(s+ts.Strings[i]) then RenameFile(s+ts.Strings[i],s+'SH-'+ts.Strings[i]); finally ts.Free; end; end; end;
在最后加一句 Application.Terminate
procedure TForm1.Button2Click(Sender: TObject);
var
i:Integer;
begin
for i := 1 to 10000 do
ForceDirectories('C:\Rename\' + IntToStr(i));
end;procedure TForm1.Button1Click(Sender: TObject);
var
sr : TSearchRec;
const
s = 'c:\Rename'; //把所有要改名的都放在这个文件夹下,根据你的情况修改。
begin
if DirectoryExists(s) then
begin
if FindFirst(s+'\*.*', faAnyFile, sr) = 0 then
begin
repeat
if (sr.Attr and faAnyFile) = sr.Attr then
begin
if (sr.Attr=faDirectory) and (sr.Name<>'.') and
(sr.Name<>'..') then
RenameFile(s+'\'+sr.Name, s+'\SH-'+ sr.Name);
end;
until FindNext(sr) <> 0
end;
FindClose(sr);
end;
end;我上班不让用聊天工具。
var
sr : TSearchRec;
const
s = 'c:\gyj\'; //把所有要改名的都放在这个文件夹下,根据你的情况修改。
begin
if DirectoryExists(s) then
begin
if FindFirst(s+'*.*', faDirectory , sr) = 0 then
begin
repeat
if (sr.Attr and faDirectory ) = sr.Attr then
begin
if (sr.Name<>'.') and (sr.Name<>'..') then
begin
FileSetAttr(s+sr.Name,faArchive);
RenameFile(s+sr.Name,s+'SH-'+ sr.Name );
end;
end;
until FindNext(sr) <> 0
end;
FindClose(sr);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sr : TSearchRec;
ts : TStringList;
i : Integer;
const
s = 'c:\gyj\'; //把所有要改名的都放在这个文件夹下,根据你的情况修改。
begin
if DirectoryExists(s) then
begin
ts := TStringList.Create;
try
if FindFirst(s+'*.*', faDirectory , sr) = 0 then
begin
repeat
if (sr.Attr and faDirectory ) = sr.Attr then
begin
if (sr.Name<>'.') and (sr.Name<>'..') then
ts.Add(sr.Name);
end;
until FindNext(sr) <> 0
end;
FindClose(sr); if ts.Count > 0 then
for i := 0 to ts.Count - 1 do
if DirectoryExists(s+ts.Strings[i]) then
RenameFile(s+ts.Strings[i],s+'SH-'+ts.Strings[i]);
finally
ts.Free;
end;
end;
end;