如何处理文件路径?

时间:2016-01-11 21:28:23

标签: ruby file path

我在我使用的环境中有一个模块,当我从文件对话框中选择一个文件时,将路径存储在一个变量中(比如var path)。

我需要获取路径中所有文件的列表并将其存储到数组中。

所以我试过的是:

list = Dir[path + "*"]

事实是路径是这样的事情:

D:\Google Drive\Samples\Black Octopus Sound\Drums - Kicks\

当我读到它时,数组是空的。这是因为斜杠应该是/而不是\。所以我这样做了:

path = path.gsub('\\','\/')

但结果是:

D:\/Google Drive\/Samples\/Black Octopus Sound\/Drums - Kicks\/

看起来像存储在变量中的路径是:

D:\\Google Drive\\Samples\\Black Octopus Sound\\Drums - Kicks\\

是正常的吗?因为如果我只是打印路径,它看起来是正确的:

D:\Google Drive\Samples\Black Octopus Sound\Drums - Kicks\

这是Ruby中逃避路径的预期行为吗?我错了吗?我怎样才能最好地处理这种情况?

为什么我不能写:

path = "D:\Google Drive\Samples\Black Octopus Sound\Drums - Kicks\"

但仅限:

path = "D:\Google Drive\Samples\Black Octopus Sound\Drums - Kicks\ " // notice the last empty space in the end

它说unterminated string meets end of file

2 个答案:

答案 0 :(得分:1)

\   means =>> Escapes the next metacharacter. 

意味着你不能在windows上使用反斜杠作为glob的一部分,例如。

 Dir["D:\foo*"] will not work, use Dir["D:/foo*"] instead.`

答案 1 :(得分:0)

试试这个:

path = 'D:\Google Drive\Samples\Black Octopus Sound\Drums - Kicks\'

报价的差异。 ''将自动转义反斜杠,而""则不会。

你也写道:

  

这是因为斜杠应该是/而不是\

Windows在路径中使用反斜杠,但正如@theTinMan注意到的那样,如果可能的话,ruby将在不同的操作系统约定之间转换路径名。

来自doc

  

在Ruby字符串中指定Windows样式的文件名时,请记住   逃避反斜杠

同样很简单的例子,你可以找到here