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

我目前的想法是放入一个正则表达式,该正则表达式根据我所使用的系统将错误的代码转换为正确的代码。 这将具有使任何一种类型在任何一个系统上都能工作的效果。 除了我现在有两个问题外 ,还有人看到其他问题吗?

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

编辑:主要问题是使Windows路径在unix上工作而不是相反。

#1楼 票数:5 已采纳

在Win32中也完全支持/。

另请参阅此相关问题

#2楼 票数:1

Windows通常会接受\\或/,因此在/上进行标准化可以使您的问题更简单,只要您完全控制文件名即可。

#3楼 票数:1

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

LoadApplicationData(FileManager.GetDataFilePath)

然后,文件管理器将检测到该环境,并返回正确的文件路径选项。 这样,您还可以适应Win32和Unix定位标准(例如Program Files和/ usr或其他文件)。

#4楼 票数:1

请注意,当您考虑驱动器号(在Unix上没有模拟)和特殊的“ forks”(MacOS pre-X术语-同样在Unix上也没有模拟,尽管MacOS X有它们-令人惊讶的)时,Win32路径很复杂。提供。 小心。

#5楼 票数:0

为您的输入创建一个解析器,以创建代表目录的节点的树结构。 然后,您可以通过遍历树并编写所需的任何定界符或选择执行其他操作(例如检查目录是否存在或编写元文件)来“保存”。 这实际上是我现在想对自己的应用有用的东西:-)

#6楼 票数:0

您没有说您正在使用什么语言,所以我将自私地假定c / c ++。 boost ,如果您愿意使用它,则具有文件系统库 当然,如果您使用的是动态语言,则FS抽象库可能也已经存在(例如,在perl中,File :: Spec是相当标准的)。

#7楼 票数:0

您尚未告诉我们您要从中读取路径的文件类型。 我将假定它们是配置文件。 在这种情况下,有很多方法,恕我直言,正确的答案是设计程序以避免可能的操纵路径。 我在这里发布了答案: https//stackoverflow.com/a/40980510/2345997 ,这是相关的。

方法:

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

  ask by BCS translate from so

未解决问题?本站智能推荐:

1回复

Windows和Unix在\\ r \\ n(CRLF)和\\ n(LF)之间的可移植性错误?

当我在Windows平台上为Shell脚本编写代码时 但是尝试在UNIX平台上执行它给了我错误'20\\r': command not found因为Windows文件以/ r / n结尾,而UNIX文件以/ n结尾。 任何想法如何删除和处理这种错误?
1回复

`ps`命令的可移植性如何?

我正在制作一个bash脚本,我想确保它是可移植的。 对于上下文,该命令将是tmux-resurrect插件的一部分。 我想使用这个命令: ps -eo ppid,command 。 该命令是否可移植? 我也很高兴听到如何检查自己。 例如:也许有一种服务可以测试大量操作系统上的命
2回复

驱动程序可移植性

对于这个网站,这可能是一个la脚的问题,但是可以解决。 驾驶员可以携带吗? 例如,可以为Mac的键盘背光编写驱动程序,然后将其移植到另一个UNIX系统(也许是Solaris)上吗? 还是驾驶员便携性是一个矛盾? 任何涉及该主题的文章将不胜感激。
1回复

C-Windows和Unix上的可移植代码

我正在创建一个程序,并且希望它在Windows和UNIX上运行。 但是,我使用了许多Windows或Unix特定的功能。 例如,位于UNIX的#include<unistd.h>和#include <sys/utsname.h>函数,对于Windows则位于#incl
1回复

可移植性,csv文件应在Windows上使用CRLF换行

我已经开发了一种命令行工具,可以将某种二进制数据转换为csv文本。 现在,我将其移植到Windows,但仍然不确定是否应该为Windows专门写“ \\ r \\ n”换行符,还是照常写“ \\ n”。 我希望所有平台上的输出都完全相同。 但是我不是Windows专家,也不知道可能发生
4回复

Windows和Linux之间的C ++可移植性

我有一个关于编写可在Windows和Linux之间移植的程序的问题。 最近我意识到,如果你编写一个使用任何类型的外部库的程序,如果该库没有linux版本(或者在linux下开发时使用的是windows版本)那么你就搞砸了。 接下来是我的问题:如果我在Linux中编写一个链接到lol.
1回复

文件夹分隔符窗口和UNIX的ANSI C定义[重复]

这个问题已经在这里有了答案: 如何在C预处理器中可靠地检测Mac OS X,iOS,Linux,Windows? [重复] 3个答案 我正在为Unix和Windows编写程序,我需要为文件夹分隔符定义如下: #define FOLDER_SEPARATOR "/"
1回复

ffmpeg可移植性所需的文件

我正在制作一个python GUI应用程序,并使用ffmpeg对文件进行编码。 我将ffmpeg与它捆绑在一起,所以我想知道使它具有便携性需要什么。 它仅能与/ opt / local / bin文件夹中的ffmpeg二进制文件一起使用吗?