我尝试使用以下代码返回目录的文件列表:
Dir[directory]
我遇到的问题似乎总是将网址作为相对于项目位置的网址。例如,通过' *'进入Dir会返回一个包含我的Gemfile等的数组。我希望能够获取/Users/jason/Pictures
等目录的文件列表,但是当我传入/Users/jason/Pictures/*
时,我返回一个空数组。
任何指针都将非常感激。 感谢。
答案 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