gpt4 book ai didi

ruby - Dir#chdir() 是否虚拟更改目录?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:31 25 4
gpt4 key购买 nike

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

最佳答案

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

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

\Matt,以反斜杠开头,指的是文件系统root 中名为Matt 的目录,如 C:\马特。那是不存在的。您想要更改相对于 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

关于ruby - Dir#chdir() 是否虚拟更改目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14585566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com