就上午那个关于文件夹改名的问题:不好意思,程序还得改进下,对于某一目录下文件夹少的情况下可以,但是文件夹一多的话就不可以了(情况是一个文件夹添加多个要添加的字符),还有能不能做成执行完这一功能后它就自动退出呢?

解决方案 »

  1.   

    什么意思?“文件夹一多”里面有多少要改名字的文件夹?我测试一下,上午只用两个。执行完这一功能后它就自动退出
    在最后加一句 Application.Terminate
      

  2.   

    修改测试,没有问题;可能是你其它设置的有问题,仔细找找吧。//首先建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;我上班不让用聊天工具。
      

  3.   

    你写程序功能是能完成,不知你看结果没有,30左右文件夹还可以,50多个文件夹结果就有问题了,咱不是只加一‘SH’吗,可是结果加了好多个‘SHSHSH...',怎摸回事呢?
      

  4.   

    你先把我上面的程序直接复制做一下看看,把数据该小点,建了一万个文件夹都我就没有发现问题,几十个就更不用说了。先点button2。
      

  5.   

    我就是直接复制过去的啊,应该与Delphi版本无关把,我现在用的是Delphi 7。这几天打扰你了,真实太感谢了。
      

  6.   

    不知道怎么回事,用FindNext的时候,如果文件夹名字是22-85没有问题,如果是22-85A当RenameFile后又找到该名后的文件夹。
      

  7.   

    其实不是文件的多少的问题,是和文件名有关,我把文件的属性改成存档的,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;
      

  8.   

    这下可以,不过我不明白原来的错误原因。
    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;