Ruby File::rename()删除目标文件而不是更改它

Ruby File::rename()删除目标文件而不是更改它,ruby,windows,Ruby,Windows,从当前工作目录中,我试图重命名另一个目录中的文件。我的测试IRB代码如下: C:\Documents and Settings\peter>irb irb(main):001:0> Dir.pwd => "C:/Documents and Settings/peter" irb(main):002:0> File.rename('C:\Documents and Settings\peter\My Documents\userdata\test.txt','a.txt')

从当前工作目录中,我试图重命名另一个目录中的文件。我的测试
IRB
代码如下:

C:\Documents and Settings\peter>irb
irb(main):001:0> Dir.pwd
=> "C:/Documents and Settings/peter"
irb(main):002:0> File.rename('C:\Documents and Settings\peter\My Documents\userdata\test.txt','a.txt')
=> 0
irb(main):003:0>File.exist?('C:\Documents and Settings\peter\My Documents\userdata\test.txt')
=> false
irb(main):004:0>File.exist?('C:\Documents and Settings\peter\My Documents\userdata\a.txt')
=> false
irb(main):005:0>

目标文件不是重命名,而是从文件系统中删除-为什么?如果重命名文件不是正确的方法,请建议我一种安全的方法。但是我无法更改当前工作目录以进行重命名,如果需要更改当前目录,则要进行重命名,重命名后,我希望返回上一个当前工作目录。

首先,您不应在此处使用反斜杠。原因是反斜杠是一个转义序列启动器,因此下次可能会得到非常意外的结果(例如,如果在双引号字符串中意外使用反斜杠)。在这种情况下没有问题,但这是一个愚蠢的运气。在文件路径中始终使用正斜杠。你应该处理得很好

第二,你找错地方了。重命名的文件应出现在

C:/Documents and Settings/peter/a.txt
因为这是您当前的工作目录。如果希望它显示在“C:/Documents and Settings/peter/My Documents/userdata”中,请在重命名之前更改工作目录,或指定完整的目标文件路径

File.rename('C:/Documents and Settings/peter/My Documents/userdata/test.txt',
            'C:/Documents and Settings/peter/My Documents/userdata/a.txt')
也可以将块与一起使用


块返回后,工作目录将恢复到调用
chdir
之前的状态。

首先,不应在此处使用反斜杠。原因是反斜杠是一个转义序列启动器,因此下次可能会得到非常意外的结果(例如,如果在双引号字符串中意外使用反斜杠)。在这种情况下没有问题,但这是一个愚蠢的运气。在文件路径中始终使用正斜杠。你应该处理得很好

第二,你找错地方了。重命名的文件应出现在

C:/Documents and Settings/peter/a.txt
因为这是您当前的工作目录。如果希望它显示在“C:/Documents and Settings/peter/My Documents/userdata”中,请在重命名之前更改工作目录,或指定完整的目标文件路径

File.rename('C:/Documents and Settings/peter/My Documents/userdata/test.txt',
            'C:/Documents and Settings/peter/My Documents/userdata/a.txt')
也可以将块与一起使用


块返回后,工作目录将恢复到调用
chdir
之前的状态。

我正在使用
windowsxp
。我所有的脚本都使用了这个`\`。没问题。我仍然鼓励你使用前斜杠。下次在双引号字符串中使用反斜杠时,请使用-bam!-您有问题。没有,
test.txt
userdata
文件夹中,我必须在那里更改它。但我已经尝试过,如果我将当前工作目录更改为
userdata
,那么重命名就会完美地发生。是的,可以为目标文件指定完整的文件路径,或者像那样更改工作目录。如果我使用
block
,那么知道如何返回到以前的当前目录吗?你的想法很好,如果你能给我一点帮助,我可以给它一个好的开始。我正在使用
windowsxp
。我所有的脚本都使用了这个`\`。没问题。我仍然鼓励你使用前斜杠。下次在双引号字符串中使用反斜杠时,请使用-bam!-您有问题。没有,
test.txt
userdata
文件夹中,我必须在那里更改它。但我已经尝试过,如果我将当前工作目录更改为
userdata
,那么重命名就会完美地发生。是的,可以为目标文件指定完整的文件路径,或者像那样更改工作目录。如果我使用
block
,那么知道如何返回到以前的当前目录吗?你的想法很好,如果能帮你一点忙,我可以给它一个好的开始。