1

我有实际的目录路径: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>
4

1 回答 1

4

它改变了正在运行的程序的工作目录,而不是虚拟的。(但不是物理意义上的,当你退出时,提示符会显示一个不同的目录)

但是前面的反斜杠是指文件系统的根。

\Matt,以反斜杠开头,指的是在文件系统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

于 2013-01-29T14:48:43.020 回答