用于windows和unix的文件分隔符

时间:2012-01-16 15:01:22

标签: c windows linux path

我有一个应该在windows和unix系统上运行的代码(Mac,linux等),我想在相对路径中访问/删除一些文件,有没有办法以一种方式构建路径兼容两种操作系统(如Java的File.separator)?

我最接近的事情就是这样:

#ifdef _WIN32
#define FILE_SEPARATOR   "\\"
#else
#define FILE_SEPARATOR   "/"
#endif

//in windows - ".\\filedir\\filename.txt"
//in *nix - "./filedir/filename.txt"
const char * mypath = "." FILE_SEPARATOR "filedir" FILE_SEPARATOR "filename.txt";

修改

在阅读下面的答案/评论后 - 我想补充一点,确认Windows XP或更新符合POSIX对我来说已经足够了。

4 个答案:

答案 0 :(得分:7)

Windows支持符合POSIX标准的路径分隔符。

这意味着在构建路径并使用Windows API或C IO函数时,可以安全地使用正斜杠/

但是,如果您的代码充当库并公开接受并返回路径的API,则可能必须对输入路径进行posixify并且必须取消返回路径。这会增加轻微的负担,但会让消费者感觉更加原生。

答案 1 :(得分:5)

简单的答案就是在两者上使用/。即使Windows在命令行中指定路径分隔符时需要\,但在参数CreateFile中传递时,您可以使用'/'作为路径分隔符,而不会出现任何问题。< / p>

这一直是MS-DOS 2.0(第一个支持子目录和路径)。虽然它不会持续很长时间,但是甚至有DOS版本允许您将switchar更改为' - ',因此即使在命令行上它也允许/作为路径分隔符。 / p>

答案 2 :(得分:2)

除非我遗漏了某些内容,否则Windows中的C库将接受“/”分隔符。

答案 3 :(得分:0)

除了其他答案,你可以使用一些C便携式图层库,例如Glib(来自Gtk)为您提供了一组平台无关的功能。