我对File Class
方法的效用感到困惑,如下所示:
1. File::absolute_path
2. File::realdirpath
3. File::realpath
4. File::expand_path
我在下面尝试的内容:
irb(main):001:0> Dir.pwd
=> "C:/Users/Matt"
irb(main):002:0> Dir.chdir('D:\VB Script\excel_ie_wsh')
=> 0
irb(main):003:0> Dir.pwd
=> "D:/VB Script/excel_ie_wsh"
irb(main):005:0> File.realdirpath('\VB Script\excel_ie_wsh')
=> "/VB Script/excel_ie_wsh"
irb(main):006:0> File.realpath('\VB Script\excel_ie_wsh')
=> "/VB Script/excel_ie_wsh"
irb(main):007:0> File.absolute_path('\VB Script\excel_ie_wsh')
=> "D:/VB Script/excel_ie_wsh"
irb(main):008:0> File.realpath('readme.txt')
=> "D:/VB Script/excel_ie_wsh/readme.txt"
irb(main):009:0> File.realdirpath('readme.txt')
=> "D:/VB Script/excel_ie_wsh/readme.txt"
irb(main):012:0> File.absolute_path('readme.txt')
=> "D:/VB Script/excel_ie_wsh/readme.txt"
irb(main):013:0>
问题:
File.realdirpath
和File.realpath
会产生相同的输出?File.realpath
与File.absolute_path
的区别?absolute_path(file_nam)
与absolute_path(file_name[, dir_string] )
的区别如何?realdirpath(pathname)
与realdirpath(pathname [,
dir_string])
的区别如何?答案 0 :(得分:3)
为什么File.realdirpath和File.realpath产生相同的输出?
根据ruby-doc,这两种方法的唯一区别在于路径名的最后一个组件是否必须存在。 realdirpath
并不关心,realpath
会抛出异常。
例如,获取不存在的文件的路径时:
irb(main):001:0> File.realpath('nonexistent.file')
Errno::ENOENT: No such file or directory - H:/nonexistent.file
from (irb):1:in `realpath'
from (irb):1
from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):002:0> File.realdirpath('nonexistent.file')
=> "H:/nonexistent.file"
File.realpath与File.absolute_path的区别是什么?
我不是在UNIX系统上测试这个,但我的猜测是唯一的区别是当路径开始波浪号(即〜)时。在UNIX中,代字号表示主目录。我假设两种方法之间的区别在于它是否扩展了主目录。
如果你在Windows上,它应该没关系(即没有主目录快捷方式)。
realdirpath(路径名)与realdirpath(路径名[,dir_string])有何不同?
ruby-doc声明“如果给出了dir_string,它将被用作解释相对路径名而不是当前目录的基本目录。”换句话说,可以指定dir_string来覆盖起点。
例如,我们假设:
然后你可以看到差异:
H:\>irb
irb(main):001:0> File.realdirpath('test.txt')
=> "H:/test.txt"
irb(main):002:0> File.realdirpath('test.txt', './Expense')
=> "H:/Expense/test.txt"
您可以看到第二个语句根据dir_string中指定的目录查找文件。
absolute_path(file_nam)与absolute_path(file_name [,dir_string])有何不同?
这与上一个问题相同。
答案 1 :(得分:2)
这不是为了回答您的问题,而是在Windows机器上使用Ruby,Perl和Python等语言时帮助保持理智。
不要浪费时间使用反斜杠编写路径。相反,加入* nix类型的操作系统并在代码中使用正斜杠。这样可以更轻松地将文件从桌面环境移动到网络/托管环境,因为互联网和企业的大铁通常是* nix系统。
如果可能,Ruby将在不同的操作系统约定之间转换路径名。例如,在Windows系统上,文件名“/gumby/ruby/test.rb”将打开为“\ gumby \ ruby \ test.rb”。在Ruby字符串中指定Windows样式的文件名时,请记住转义反斜杠:
"c:\\gumby\\ruby\\test.rb"
我们这里的例子将使用Unix风格的正斜杠; File :: SEPARATOR可用于获取特定于平台的分隔符。