文件路径可移植性

时间:2008-11-10 23:03:02

标签: windows unix portability filepath

我有一个程序需要在* nix和windows下运行。因为程序从文件中获取文件路径,所以问题是如何解决\ vs /问题。

我目前的想法是放入一个正则表达式,根据我所使用的系统将错误的一个转换为正确的正则表达式。这将使任一类型在任一系统上都起作用。除now I have two problems这个事实外,有没有人看到任何其他问题?

(其他更好的解决方案非常受欢迎)

编辑:主要问题是让Windows路径在unix上运行而不是相反。

7 个答案:

答案 0 :(得分:5)

在win32中也完全支持/。

另见related question

答案 1 :(得分:1)

Windows通常会接受\或/,因此只要您完全控制文件名,标准化/可能会使您的问题变得更简单。

答案 2 :(得分:1)

您是否考虑过创建一个“文件管理器”类来处理所有文件路径问题?这样在您的邮件应用程序中,当您加载数据文件时,您可以调用这样的内容。

LoadApplicationData(FileManager.GetDataFilePath)

然后,您的文件管理器将检测它所在的环境并返回正确的文件路径选项。这样你也可以适应Win32与Unix的locatio标准(比如Program Files vs / usr或者其他)。

答案 3 :(得分:1)

请注意,当您考虑驱动器号(在Unix上没有模拟)和特殊的'forks'(MacOS pre-X术语 - 在Unix上同样没有模拟,虽然MacOS X有它们时 - Win32路径很复杂 - 惊喜,惊喜)可以提供。小心。

答案 4 :(得分:0)

为您的输入创建解析器,以创建表示目录的节点的树结构。然后你可以通过遍历树并编写你想要的任何分隔符或者选择做不同的事情来“保存”,例如检查目录是否存在或编写元文件。这实际上是我现在认为对我自己的应用程序有用的东西: - )

答案 5 :(得分:0)

你没有说你正在使用什么语言,所以我会自私地假设c / c ++。 boost,如果您愿意使用它,则会filesystem library。当然,如果你使用的是动态语言,FS抽象库可能已经存在(例如在perl中,File :: Spec非常标准)。

答案 6 :(得分: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。将应用程序限制为仅使用这些路径。记录此限制以及应用程序如何处理用户的路径。