我想从Windows路径中提取目录名称。 Windows路径是一个字符串,如下所示:
"c:\\some\path\name"
当我执行以下操作时:
File.dirname("c:\\some\\path\\name")
结果是
"."
如果我在unix路径上运行它,它可以正常工作
File.dirname("/some/path/name") => "/some/path"
我是否需要以某种方式设置FILE::ALT_SEPARATOR
?我试过不同的路径变化无济于事。
答案 0 :(得分:1)
推荐的方法是在Ruby代码中始终对路径分隔符使用unix类型的正斜杠。即使您在Windows操作系统上使用它,它们也会在内部正确映射到其反斜杠路径分隔符。
如果反斜杠来自用户输入,那么您需要检测操作系统是否允许文件名中的反斜杠(例如,Windows不支持,Unix确实如此)。然后,如果不允许反斜杠,则应在验证期间将它们转换为正斜杠。在Ruby代码中,将所有分隔符保留为正斜杠。因此,在使用File.dirname
等命令时,您不应该关心反斜杠。
答案 1 :(得分:0)
我找到的一个解决方案是用正斜杠替换所有反斜杠。这非常有效。但是,仍然必须有更好的解决方案。
File.dirname("c:\\some\\path\\name".gsub('\\', '/')).gsub('/', '\\')
=> "c:\\some\\path"
我在dirname调用之后将反斜杠放回来,以保持表示一致。