我有一个应该在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对我来说已经足够了。
答案 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)为您提供了一组平台无关的功能。