我是这么做的 首先查找指定目录所有文件(包括子文件夹) 的到stringlist 保存每个文件的路径 然后RenameFile(filelist.Strings [i],'newname.txt')可是 当文件下有子文件夹时 如123 文件夹下有 456文件夹 首先找到文件夹123 开始查找 得到string[]对456下的文件更名 后 发现456里的文件剪切到 123文件夹目录下 了  这是为什么?我想该名后的文件再原位置不动,当然我知道怎么解决renamefile('c:\aa.txt','c:\bb.txt') 加上路径就对了 
而这样写renamefile('c:\aa.txt','bb.txt')  当有是子文件夹文件时就会出现上述问题

解决方案 »

  1.   

    renamefile的第二个参数用绝对路径
      

  2.   

    而这样写renamefile('c:\aa.txt','bb.txt')  当有是子文件夹文件时就会出现上述问题
    ========================
    在这种情况下bb.txt会被认为是应用程序所配置的当前路径下的文件,所以当你的应用程序当前路径不是c:\时,就会产生错误.
    而之所以楼主碰到的只是到了上一级文件夹,只能解释为楼主在执行该操作前(楼主也提到是偶然性的)正好是上一前文件夹。可以这样子做一个实验:
    比如我现在在我有E:盘下建议了一个文件11.cfg,然后我执行下面的代码:
    --------------------
    SetCurrentDir('c:\');//强制人为设置当前目录为C:盘根目录
    Renamefile('e:\11.cfg','12.cfg');//重命名
    --------------------
    结果是e:\11.cfg不见了,而在C:\下生成了一个12.cfg,属性(除文件名、路径外)和内容与原e:\11.cfg相同。换句话说,在重命名的时候,也可以通过SetCurrentDir来设置当前路径,以达到目的。