从当前工作目录我试图重命名另一个目录中的文件。我的测试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>
而不是重命名目标文件是从文件系统中删除 - 为什么呢?如果不是重命名文件的正确方法,请告诉我一个安全的方法。但我无法更改当前工作目录以进行重命名,并重命名是否需要更改当前目录,重命名后我想要返回上一个当前工作目录。
答案 0 :(得分:4)
首先,你不应该在这里使用反斜杠。原因是反斜杠是一个转义序列启动器,因此下次可能会得到非常意外的结果(例如,如果你不小心在双引号字符串中使用反斜杠)。在这种情况下没有问题,但这是一个愚蠢的运气。始终在文件路径中使用正斜杠。 ruby上的windows应处理它们。
其次,你在找错了地方。重命名的文件应出现在
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')
您还可以使用Dir::chdir的块。
Dir.chdir('C:/Documents and Settings/peter/My Documents/userdata') do
File.rename('test.txt', 'a.txt')
end
在块返回后,工作目录将恢复到chdir
调用之前的状态。