File.dirname窗口路径返回

时间:2014-02-19 14:06:18

标签: ruby-on-rails ruby windows

我想从Windows路径中提取目录名称。 Windows路径是一个字符串,如下所示:

"c:\\some\path\name"

当我执行以下操作时:

File.dirname("c:\\some\\path\\name")

结果是

"."

如果我在unix路径上运行它,它可以正常工作

File.dirname("/some/path/name") => "/some/path"

我是否需要以某种方式设置FILE::ALT_SEPARATOR?我试过不同的路径变化无济于事。

2 个答案:

答案 0 :(得分:1)

推荐的方法是在Ruby代码中始终对路径分隔符使用unix类型的正斜杠。即使您在Windows操作系统上使用它,它们也会在内部正确映射到其反斜杠路径分隔符。

如果反斜杠来自用户输入,那么您需要检测操作系统是否允许文件名中的反斜杠(例如,Windows不支持,Unix确实如此)。然后,如果不允许反斜杠,则应在验证期间将它们转换为正斜杠。在Ruby代码中,将所有分隔符保留为正斜杠。因此,在使用File.dirname等命令时,您不应该关心反斜杠。

答案 1 :(得分:0)

我找到的一个解决方案是用正斜杠替换所有反斜杠。这非常有效。但是,仍然必须有更好的解决方案。

File.dirname("c:\\some\\path\\name".gsub('\\', '/')).gsub('/', '\\')
=> "c:\\some\\path" 

我在dirname调用之后将反斜杠放回来,以保持表示一致。