【问题标题】:File separator for windows and unixwindows 和 unix 的文件分隔符
【发布时间】:2012-02-11 12:00:18
【问题描述】:

我有一个代码应该在 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";

编辑

在阅读下面的答案/cmets 之后 - 我想补充一点,确认 Windows XP 或更新的 POSIX 合规性对我来说就足够了。

【问题讨论】:

  • 我相信有一个boost路径构造方法但是我现在不知道它的名字。
  • 现代 Windows(Vista、7、Server 2008 肯定;XP 我不确定)也接受 / 作为路径分隔符。

标签: c windows linux path


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

但是,如果您的代码充当库并公开了接受和返回路径的 API,则您可能必须将输入路径 posixify 和 unposixify 返回路径。这会增加一点负担,但会让您的消费者感觉更加原生。

【讨论】:

  • 你确定这适用于 Win XP 吗?你对此有什么确认吗? (我不是说这不是真的,但我不能通过只在我的电脑上查看它来确定)
  • 它适用于 Windows 3.1, 95, 98, ME, NT, XP, Vista, 7, ... Windows 上的问题子程序是 DOS CMD.EXE 程序,它将/ 视为选项的指示符(类似于 Unix 上的 -)。但是实际的 C API(或它们背后的系统调用)可以使用 / 或 `\`(斜杠或反斜杠 - 并打扰 Markdown!)作为分隔符。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-22
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      相关资源
      最近更新 更多