【发布时间】:2013-12-17 09:08:02
【问题描述】:
请看下面的例子:
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_path 返回错误的结果。
我怎样才能得到正确的结果?
我尝试使用File.expand_path的第二个参数:
puts File.expand_path(__FILE__, 'temp') #C:/TEMP/test.rb
puts File.expand_path(__FILE__, 'c:/temp') #C:/TEMP/test.rb
但是要使用它,我必须知道__FILE__的路径。
命令require_relative 似乎忽略了所有chdir-actions。所以我有希望,有一种方法可以获取文件的“真实”目录。
备注:
- 我知道block-version of Dir.chdir - 对于我的特定任务,我无法使用它。
- 我的实际解决方案:我在更改目录之前存储完整路径(我也可以在更改目录之前存储
Dir.pwd)。
【问题讨论】:
-
不明白预期的输出是什么。你能帮忙吗?
-
@ArupRakshit 我寻找源文件的真实位置。在我的示例中,它位于 c:/temp。
-
检查一下 - ruby-doc.org/core-2.0.0/File.html#method-c-realdirpath,如果有帮助的话。
-
为什么不能在亲戚之前做呢?而且,你做了宝石吗?
-
我的代码中没有使用 require_relative。但是当我试图解决我的问题时,我认识到,require_relative 对目录的更改没有问题。所以我认为可能有一个解决方案。