项目之外的路径,Ruby Dir

时间:2014-09-12 23:44:06

标签: ruby

我尝试使用以下代码返回目录的文件列表:

Dir[directory]

我遇到的问题似乎总是将网址作为相对于项目位置的网址。例如,通过' *'进入Dir会返回一个包含我的Gemfile等的数组。我希望能够获取/Users/jason/Pictures等目录的文件列表,但是当我传入/Users/jason/Pictures/*时,我返回一个空数组。

任何指针都将非常感激。 感谢。

2 个答案:

答案 0 :(得分:2)

尝试:

Dir['/Users/jason/Pictures/*']

如果该路径中嵌入了文件或目录,您将从Dir[]返回一个数组。如果你没有,而且你确定目录中有文件,那么就会出现问题,但它最有可能出现在你给它的全局字符串中。通过移动到它并使用pwd查看操作系统认为它是什么来确认它是正确的路径。如果glob字符串不有效,Dir[]不会返回错误,它只返回一个空数组。

您可以尝试使用File.exist?('glob string without *')并在尝试迭代之前查看该路径是否存在。

在我的机器上,在我的主目录中的IRB中运行:

Dir['./vim/bundle/*']

返回:

[
    [ 0] "./vim/bundle/closetag.vim",
    [ 1] "./vim/bundle/ctrlp.vim",
    ...
    [31] "./vim/bundle/vim-vividchalk",
    [32] "./vim/bundle/Vundle.vim"
]

我也可以使用绝对路径:

Dir['/Users/ttm/vim/bundle/*']

得到:

[
    [ 0] "/Users/ttm/vim/bundle/closetag.vim",
    [ 1] "/Users/ttm/vim/bundle/ctrlp.vim",
    ...
    [31] "/Users/ttm/vim/bundle/vim-vividchalk",
    [32] "/Users/ttm/vim/bundle/Vundle.vim"
]

请注意,如果使用相对glob字符串,则获取相对路径名,并使用绝对路径字符串的绝对路径名。

答案 1 :(得分:0)

您需要使用条目方法

Dir.entries('/')
=> [".", "..", ".apdisk", ".com.apple.backupd.mvlist.plist", ".dbfseventsd", ".DocumentRevisions-V100", ".DS_Store", ".file", ".fseventsd", ".hotfiles.btree", ".MobileBackups",".OSInstallMessages", ".PKInstallSandboxManager", ".Spotlight-V100", ".SymAVx86QSFile", ".Trashes", ".vol", "Applications", "bin", "cores", "dev", "etc", "home", "Library", "net", "Network", "opt", "private", "sbin", "System", "tmp", "Users", "usr", "var", "Volumes", "~"]

以下是官方文档http://www.ruby-doc.org/core-2.1.2/Dir.html#method-c-entries