File.dirname窗口path返回

我想从Windowspath中提取目录名称。 窗口path是一个string,如下所示:

"c:\\some\path\name" 

当我做到以下几点:

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

结果是

 "." 

如果我在unixpath上运行它,它工作正常

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

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

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

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

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

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

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