如何检查文件是否存在

How to check whether a File exists

我有一个字符串数组,我只想 select 这些作为文件路径的字符串:

我的路径是 "~/dlds/some_file.ics",其中 ~/dlds 是我系统上 ~/archive/downloads 的符号链接。该文件具有以下权限:

-rw-r--r--

我的代码(我尝试了几种变体):

ARGV.select do |string|
    File.file? string # returns false
    Pathname.new(string).file? # returns false
    Pathname.new(string).expand_path.file? # returns false
end

我不知道还能尝试什么。

我是 运行 Ruby 2.2.0 或 2.2.2。

我想 File.readlink 就是您要找的东西

Returns the name of the file referenced by the given link. Not available on all platforms.

File.readlink("path/to/symlink")
File.exist? File.expand_path "~/dlds/some_file.ics"

你的问题有点令人费解。如果你想检查文件是否存在,你应该像你一样做:

Pathname.new(file_name).file? 

如果你使用的是~你首先要扩展路径,所以写:

Pathname.new(file_name).expand_path.file? 

如果你想检查给定的file_name是否是一个symlink,你可以只做

Pathname.new(file_name).expand_path.symlink? 

如果你想找到symlink指向的文件,你必须按照link:

File.readlink(Pathname.new(file_name).expand_path) 

这将 return linked 文件的文件名,所以如果你真的想要,你可以这样做:

Pathname.new(File.readlink(Pathname.new(file_name).expand_path)).file? 

确保 symlink 指向现有文件。