procedure TForm1.Button1Click(Sender: TObject); var sr: TSearchRec; FileAttrs: Integer; Filename : String; begin FileAttrs := faAnyfile; if FindFirst('*.txt', FileAttrs, sr) = 0 then begin repeat if (sr.Attr and FileAttrs) = sr.Attr then begin
RenameFile(sr.Name,filename); end; until FindNext(sr) <> 0; FindClose(sr); end; end;
也可以使用copy时候改名我找到的一个改名函数,好像有点问题,你看看能用吗? function scShellRenameFile(FormHandle : THandle; StrFrom, StrTo : string; BlnSilent : Boolean = False) : Boolean; var F : TShFileOpStruct; begin F.Wnd:=FormHandle; F.wFunc:=FO_RENAME; F.pFrom:=PChar(StrFrom+#0); F.pTo:=PChar(StrTo+#0); F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION; if BlnSilent then F.fFlags := F.fFlags or FOF_SILENT; if ShFileOperation(F) <> 0 then result:=False else result:=True; end;
我用pathe(睡斛)的方法,找是找到了,为什么物理文件还是没有真正的改过来?我用下面的代码(好像和ChangeFileExt一样,不修改实际的文件): procedure TForm1.BitBtn1Click(Sender: TObject); var sr: TSearchRec; FileAttrs: Integer; Filename : String; begin FileAttrs := faAnyfile; if FindFirst('E:\downloads\mp3\*.mpga', FileAttrs, sr) = 0 then begin repeat if (sr.Attr and FileAttrs) = sr.Attr then begin filename :=copy(sr.name, 0, Pos(ExtractFileExt(sr.Name),sr.Name));// filename := filename +'mp3'; //ShowMessage(filename); if RenameFile(sr.Name, filename) then showmessage('success!'); end; until FindNext(sr) <> 0; FindClose(sr); end; end;
to kevin_gao(困了!累了!睡觉了!) : 用你的改名函数,提示无法读文件或磁盘 if scshellrenamefile(Handle, sr.name, filename, false) then showmessage('success!'); 其它同我上面贴出来的代码。 请教!
var
sr: TSearchRec;
FileAttrs: Integer;
Filename : String;
begin FileAttrs := faAnyfile; if FindFirst('*.txt', FileAttrs, sr) = 0 then begin
repeat
if (sr.Attr and FileAttrs) = sr.Attr then
begin
filename :=copy(sr.name,0,Pos(ExtractFileEx,(sr.Name),sr.Name));//
filename := filename +'mp3'; //Filename := changeFileext(sr.Name,'.mp3');
RenameFile(sr.Name,filename);
end;
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;
function scShellRenameFile(FormHandle : THandle; StrFrom, StrTo : string; BlnSilent : Boolean = False) : Boolean;
var
F : TShFileOpStruct;
begin
F.Wnd:=FormHandle;
F.wFunc:=FO_RENAME;
F.pFrom:=PChar(StrFrom+#0);
F.pTo:=PChar(StrTo+#0);
F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
if BlnSilent then
F.fFlags := F.fFlags or FOF_SILENT;
if ShFileOperation(F) <> 0 then
result:=False
else
result:=True;
end;
我用pathe(睡斛)的方法,找是找到了,为什么物理文件还是没有真正的改过来?我用下面的代码(好像和ChangeFileExt一样,不修改实际的文件):
procedure TForm1.BitBtn1Click(Sender: TObject);
var
sr: TSearchRec;
FileAttrs: Integer;
Filename : String;
begin
FileAttrs := faAnyfile;
if FindFirst('E:\downloads\mp3\*.mpga', FileAttrs, sr) = 0 then
begin
repeat
if (sr.Attr and FileAttrs) = sr.Attr then
begin
filename :=copy(sr.name, 0, Pos(ExtractFileExt(sr.Name),sr.Name));//
filename := filename +'mp3';
//ShowMessage(filename);
if RenameFile(sr.Name, filename) then showmessage('success!');
end;
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;
to kevin_gao(困了!累了!睡觉了!) :
用你的改名函数,提示无法读文件或磁盘
if scshellrenamefile(Handle, sr.name, filename, false) then showmessage('success!');
其它同我上面贴出来的代码。
请教!
to agui:
我是想编程实现
当然了这只是把文件名字改掉而已!
delphi5+win2k
另外我的dos虚拟机有点问题,不知和这个有没有什么关系
我那段代码是有点问题,我也不知道为什么,ShFileOperation是支持改名的,我自己写的也会出现你所说的问题,而我帖出来的代码是网上找的和我碰到的情况一样。 ShFileOperation应该是可以解决的,不知道错在哪儿!