是啊。
先用FINDFIRST结合FINDNEXT找出文件,
然后用RenameFile(LPSTR szFullPath, LPSTR szBackup)改名就可以了。另外,估计ChangeFileExt也有用把。

解决方案 »

  1.   

    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
     
     
              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;
      

  2.   

    也可以使用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;
      

  3.   


         我用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;
      
      

  4.   


      to kevin_gao(困了!累了!睡觉了!) :
            用你的改名函数,提示无法读文件或磁盘
               if scshellrenamefile(Handle, sr.name, filename, false) then showmessage('success!');
                   其它同我上面贴出来的代码。
       请教!
      
      

  5.   

       
       to agui:
                 我是想编程实现
      

  6.   

    批处理就解决了呀ren *.mpeg *.mp3把这行代码存成.bat文件,然后拷到要更名的文件夹下运行就OK了
      

  7.   

    不会吧,我这很好用的,renamefile很管用的呀,没有什么问题,
    当然了这只是把文件名字改掉而已!
      

  8.   


       delphi5+win2k
             另外我的dos虚拟机有点问题,不知和这个有没有什么关系
       
      

  9.   

    To: taber(旺财,吃饭喽!) 
    我那段代码是有点问题,我也不知道为什么,ShFileOperation是支持改名的,我自己写的也会出现你所说的问题,而我帖出来的代码是网上找的和我碰到的情况一样。 ShFileOperation应该是可以解决的,不知道错在哪儿!