繁体   English   中英

用于windows和unix的文件分隔符

[英]File separator for windows and unix

我有一个应该在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对此的合规性对我来说已经足够了。

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

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

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

简单的答案是只使用/两者。 即使Windows在命令行上指定路径分隔符时需要\\ ,当在参数CreateFile传递时,您可以使用'/'作为路径分隔符,完全没有问题。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM