我有实际的目录路径:C:\Documents and Settings\Matt\
现在我在这里尝试了Dir::chdir()
,看看它是如何工作的。
C:\Documents and Settings\Matt>cd..
C:\Documents and Settings>cd..
C:\>irb
irb(main):001:0> Dir.pwd
=> "C:/"
irb(main):002:0> Dir.chdir('\Documents and Settings')
=> 0
irb(main):003:0> Dir.pwd
=> "C:/Documents and Settings"
现在下面为什么会出现错误,而之前的pwd
显示当前目录已更改
如"C:\Documents and Settings"
?
irb(main):004:0> Dir.chdir('\Matt')
Errno::ENOENT: No such file or directory - \Matt
from (irb):4:in `chdir'
from (irb):4
from C:/Ruby193/bin/irb:12:in `<main>'
但低于它的作用 - 这是否意味着chdir没有将目录更改为"C:\Documents and Settings"
?我使用C:\
时来自Dir.chdir('\Documents and Settings')
?
irb(main):005:0> Dir.chdir('\Documents and Settings\Matt')
=> 0
irb(main):006:0> Dir.pwd
=> "C:/Documents and Settings/Matt"
irb(main):007:0>
答案 0 :(得分:4)
它改变了正在运行的程序的工作目录,而不是虚拟的。 (但从物理上讲,退出时,提示符将显示不同的目录)
但是前面的反斜杠指的是文件系统的根。
\Matt
,在开头有一个反斜杠,指的是文件系统的 root 上名为Matt
的目录,如C:\Matt
中所示。那不存在。您想要相对于Documents and Settings
更改目录,因此请不要使用反斜杠。
Dir.pwd
=> "C:/"
Dir.chdir('\Documents and Settings')
# Matt is inside Documents and Settings, not at the root \
Dir.chdir('Matt')
# Or use .\ to refer to the current directory
Dir.chdir('.\Matt')
# Even better, use File.join to supply the correct separator, which makes this platform-independent
Dir.chdir(File.join('.','Matt'))
如果你这样做:
Dir.chdir('\Matt')
...它会尝试更改为不存在的C:\Matt
。