Ruby:如何在chdir之后获得源文件的正确完整路径?
请参见以下示例:Ruby:如何在chdir之后获得源文件的正确完整路径?,ruby,path,chdir,Ruby,Path,Chdir,请参见以下示例: puts __FILE__ #test.rb puts File.expand_path(__FILE__) #C:/TEMP/test.rb Dir.chdir('..') puts __FILE__ #test.rb puts File.expand_path(__FILE__) #C:/test.rb 在(全局)chdir之后,exp
puts __FILE__ #test.rb
puts File.expand_path(__FILE__) #C:/TEMP/test.rb
Dir.chdir('..')
puts __FILE__ #test.rb
puts File.expand_path(__FILE__) #C:/test.rb
在(全局)chdir
之后,expand\u路径
返回错误的结果
如何获得正确的结果?
我试图使用文件的第二个参数。展开\u path
:
puts File.expand_path(__FILE__, 'temp') #C:/TEMP/test.rb
puts File.expand_path(__FILE__, 'c:/temp') #C:/TEMP/test.rb
但是要使用它,我必须知道\uuuu文件的路径
命令require\u relative
似乎忽略了所有chdir
-操作。所以我希望,有一种方法可以获得文件的“真实”目录
备注:
- 我知道——对于我的特定任务,我不能使用它
- 我的实际解决方案是:我在更改目录之前存储完整路径(我也可以在更改目录之前存储
Dir.pwd
)
\uuuuu文件\uuuuuu
内置是String
类的一个实例:
puts __FILE__.class
# ⇒ String
这意味着你不应该期望它有任何巫毒魔法。它存储相对路径,此文件加载于
ruby C:\TEMP\test.rb # ⇒ __FILE__ == 'C:\TEMP\test.rb'
cd C:\TEMP && ruby test.rb # ⇒ __FILE__ == 'test.rb'
ruby 2.0中有一个新内置的\uuuu dir\uuuu
。它看起来像是您正在寻找的,以防2.0
-您可以选择唯一的解决方案。不了解预期的输出是什么。。你能帮忙吗?@ArupRakshit我在寻找源文件的真实位置。在我的示例中,它位于c:/temp中。如果有帮助,请检查此-。为什么不能在相对之前执行此操作?还有,你做过gem吗?我的代码中没有使用require\u亲戚。但当我试图解决我的问题时,我认识到,require_relative对目录的更改没有问题。所以我想可能有一个解决办法。