15

是否存在任何处理跨平台路径的 C++ GNU 独立类?我的应用程序构建在 Windows 和 LLinux 上。我们的配置文件引用了单独目录中的另一个文件。我希望能够将其他配置文件的路径读入一个可以在 Linux 或 Windows 上运行的类。

哪个类将提供最小的占用空间来转换在任一系统上使用的路径?谢谢

4

4 回答 4

20

除非您使用绝对路径,否则根本不需要翻译 - Windows 会自动将正斜杠转换为反斜杠,因此如果您使用带有正斜杠路径分隔符的相对路径,那么您将是黄金。如果可能的话,你真的应该避免绝对路径。

于 2008-09-23T17:33:13.213 回答
13

试试boost::filesystem

于 2008-09-23T17:33:24.337 回答
5

boost 中的文件系统库可能会对您有所帮助。

于 2008-09-23T17:33:37.237 回答
0

有很多方法,恕我直言,正确的答案是重新设计您的程序以避免操纵路径。我在这里发布了一个答案:https ://stackoverflow.com/a/40980510/2345997这是相关的。

方法:

  1. 添加一个命令行选项,允许用户指定有问题的路径,而不是从配置文件中读取它。
  2. 添加命令行选项,以便用户可以指定基本路径。配置文件中的路径将被解释为位于此基本路径下。
  3. 将您的配置文件分成三个。一个文件将具有跨平台配置,另一个文件将具有仅 Windows 配置,最终文件将具有仅 Linux 配置。然后用户可以为 Windows 和 Linux 指定正确的路径。在 Windows 上,您的程序将读取跨平台配置文件和仅限 Windows 的配置文件。在 Linux 上,它将读取跨平台文件和仅限 Linux 的配​​置文件。
  4. 将预处理添加到您的配置文件解析中。这将允许您拥有一个配置文件,用户可以在其中使您的程序忽略文件中的某些行,具体取决于程序在哪个操作系统上运行。因此,用户将能够两次指定文件的路径。一次用于 Linux,一次用于 Windows。
  5. 更改设计,使文件始终与可执行文件位于同一目录中 - 然后用户仅在配置文件中指定文件名而不是文件路径。
  6. 使用将“/”切换为“\”的简单函数。然后向用户记录他们必须将路径指定为 Linux 路径,并且此转换将应用于 Windows。
  7. 为此创建您自己的路径迷你语言并将其记录给用户。例如:“/” - 指定目录分隔符,{root} - 展开到文件系统的根目录,{cwd} - 展开到当前目录,{app} - 展开到您的应用程序的路径等...然后用户可以在两个平台上指定文件路径,例如:{root}/myfiles/bob.txt。
  8. 一些路径将在两个平台上都有效。例如:相对路径,如 ../my files/bill.txt。限制您的应用程序仅使用这些路径。记录此限制以及您的应用程序如何处理用户的路径。
于 2016-12-06T09:13:48.900 回答