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 に答える