Windows和Unix的文件分隔符

5

我有一段代码,应该在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标准对我来说已经足够了。


我相信有一种提升路径构建方法,但我现在不知道它的名称。 - juergen d
现代的Windows操作系统(Vista、7、Server 2008肯定支持;XP我不确定)也接受斜杠“/”作为路径分隔符。 - Mchl
4个回答

7

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

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

但是,如果您的代码作为库并公开接受和返回路径的API,则可能需要将输入路径转换为POSIX格式,并将返回路径还原为非POSIX格式。这会增加一些负担,但对于您的消费者来说会更加本地化。


你确定这对 Win XP 是正确的吗?你有什么证实吗?(我不是说这不是真的,但只靠在我的电脑上检查我不能确定) - MByD
3
它适用于Windows 3.1、95、98、ME、NT、XP、Vista、7等系统...... 在Windows上的问题在于DOS CMD.EXE程序,该程序将“/”视为选项指示器(类似于Unix上的“-”)。 但实际的C API(或其背后的系统调用)无论是使用“/”还是“\”(斜杠或反斜杠 - 同时也会影响Markdown!)作为分隔符都可以。 - Jonathan Leffler

5
简单的答案是在两者之间只需使用“/”。尽管Windows在命令行上指定路径分隔符时需要“\”,但是当在参数CreateFile中传递时,您可以使用“/”作为路径分隔符而不会出现任何问题。
这一点一直持续到MS-DOS 2.0(第一个支持子目录和路径的版本)。虽然它没有持续很长时间,但还有DOS的版本允许您将switchar更改为“-”,因此即使在命令行上也允许使用“/”作为路径分隔符。

3
除非我遗漏了什么,Windows中的C库将接受“/”作为分隔符。

-1
除了其他答案之外,您可以使用一些C可移植层库,例如Glib(来自Gtk),它为此类目的提供了一个跨平台的函数集。

使用 glib 有点宽泛,能否具体说明函数? - malat
1
这是链接,如果有人感兴趣的话:https://developer.gnome.org/glib/stable/glib-Standard-Macros.html#G-DIR-SEPARATOR-S:CAPS - smac89

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接