在我使用SaveToFile函数时,如果当前的目录已经存在了一个与我指定的文件名相同,并且当前目录存在的这个文件是只读文件,那么这时我的SaveToFile会失败。
我要解决的问题是要在SaveToFile('c:\a.txt')时如果存在了a.txt,那么重命名未a(1).txt;
再如果此时c盘不仅有a.txt,还有a(1).txt那么就重命名为a(2).txt或者a(1)(1).txt 依此类推,一直到保存成果为之。

解决方案 »

  1.   

    //---------------------------------------------------------------------------
    //组合成件名
    //MakeFileNameUnique(FileName="TestFile.txt",iUnique=1)
    //   FileNameNoExt="TestFile"
    //   FileExt=".txt"
    //return "TestFile(1).txt"
    AnsiString MakeFileNameUnique(const AnsiString FileName,const int iUnique)
    {
        return ChangeFileExt(FileName,"")+"("+IntToStr(iUnique)+")"+ExtractFileExt(FileName);
    }
    AnsiString GetUniqueFileName(const AnsiString FileName)
    {
       AnsiString Result=FileName;
       if(!FileExists(Result))
       //给定的文件不存在,则表示该文件名可以使用
          return Result;   int N=0;
       //如果FileName.Ext存在,则编码为FileName(Index).Ext
       //如 TestFile.txt.bak存在,就测试 TestFile.txt(1).bak
       //直到TestFile.txt(N).bak不存在为止
       Result=MakeFileNameUnique(FileName,++N);
       while(FileExists(Result))
          Result=MakeFileNameUnique(FileName,++N);
       return Result;
    }
      

  2.   

    //---------------------------------------------------------------------------
    //组合成件名
    //MakeFileNameUnique(FileName="TestFile.txt",iUnique=1)
    //   FileNameNoExt="TestFile"
    //   FileExt=".txt"
    //return "TestFile(1).txt"
    function MakeFileNameUnique(const FileName:string,
                                const iUnique:integer):string;
    begin
        Result:=ChangeFileExt(FileName,'')+'('+IntToStr(iUnique)+')'+ExtractFileExt(FileName);
    end;
    function GetUniqueFileName(const FileName:string):string;
    var
       N:ineger;
    begin
       Result:=FileName;
       if not FileExists(Result) then
       //给定的文件不存在,则表示该文件名可以使用
          exit;   N:=1;
       //如果FileName.Ext存在,则编码为FileName(Index).Ext
       //如 TestFile.txt.bak存在,就测试 TestFile.txt(1).bak
       //直到TestFile.txt(N).bak不存在为止   Result:=MakeFileNameUnique(FileName,N);
       while FileExists(Result) do
       begin
          inc(N);
          Result:=MakeFileNameUnique(FileName,N);
       end;
    end;
      

  3.   

    if FileExists
     DeleteFile
     RenameFile至于你说的a1 a2的判断,用一个简单的while语句判断就可以了
      

  4.   

    if FileExists
     DeleteFile
     RenameFile
      

  5.   

    楼上的漏了一句:"至于你说的a1 a2的判断,用一个简单的while语句判断就可以了"