跨平台处理文件路径

15

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

哪个类提供的足迹最小,以便将路径转换为在任一系统上使用?谢谢

4个回答

21

除非您正在使用绝对路径,否则根本没有必要进行翻译 - Windows会自动将正斜杠转换为反斜杠,因此如果您使用带有正斜杠路径分隔符的相对路径,则一切都将顺利。如果可能,请尽量避免使用绝对路径。


对于我目前的简单需求来说,这是完美的。 - Superpolock
2
不具备跨操作系统的转义、引号和分隔符规则(例如Mac)。 - jwfearn

13

4
Boost看起来非常全面,但对于我基本需求来说过于复杂了。谢谢你的建议。 - Superpolock
当您在路径中使用Unicode字符时,boost并不是那么跨平台的。换句话说,在Linux中,使用boost::filesystem::path总是有效的,但对于Windows,在某些情况下我们应该使用boost::filesystem::wpath - TonySalimi

5

0

有很多方法,我个人认为正确的答案是重新设计您的程序以避免操作路径。我在这里发布了一个答案:https://dev59.com/RWkw5IYBdhLWcg3wp8Sc#40980510,与此相关。

方法:

  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。将您的应用程序限制为仅使用这些路径。向用户记录此限制以及您的应用程序如何处理路径。

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