繁体   English   中英

文件路径可移植性

file path portability

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

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

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

7 个回复

在Win32中也完全支持/。

另请参阅此相关问题

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

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

LoadApplicationData(FileManager.GetDataFilePath)

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

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

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

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

您尚未告诉我们您要从中读取路径的文件类型。 我将假定它们是配置文件。 在这种情况下,有很多方法,恕我直言,正确的答案是设计程序以避免可能的操纵路径。 我在这里发布了答案: 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。 限制您的应用程序只能使用这些路径。 记录此限制以及您的应用程序如何处理通往用户的路径。
1 ffmpeg可移植性所需的文件

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

2 对象文件可移植性

我有一个针对intel 486和vxworks 5.0 RTOS编译的目标文件file.o。 我有一些问题: Q1:这个文件是否可以在可执行文件中链接到目标并在ARM等其他CPU架构上运行? Q2:这个文件可以在可执行文件中链接到目标并在更高型号的intel CPU上运行吗? ...

3 Glassfish文件领域可移植性

是否有可能在glassfish安装之间复制glassfish File Realm配置(即具有存储密码的用户)? 我认为所有必需的用户信息都包含在密钥文件文件中,但是事实并非如此。 据我所知,密码是通过添加一些盐的方式进行哈希处理的(对于相同的密码,每次都会生成不同的哈希值),因此,复制 ...

4 STL typedef的可移植性如何?

以下代码可移植吗? 我特别质疑在std :: iterator_traits <> :: difference_type上重载的可移植性。 如果将它的类型定义为int *(可能很奇怪;我认为标准不禁止这样做),那么为一个int数组调用iseq()将会是模棱两可的。 标 ...

2009-02-11 20:28:38 2 255   c++/ stl
6 EJB可移植性

我正在和一个朋友谈论Web应用程序(.war文件)从应用程序服务器到应用程序服务器的可移植性。 具体来说,如果我有一个.war文件,其中包含我的业务逻辑,我的ejb jar和我的“网络”组件,例如html / css / js。 他似乎建议我可以像将glassfish服务器一样轻松地将战 ...

8 Unicode可移植性

我目前正在处理一个使用std::string和char进行字符串操作的应用程序 - 这在linux上很好,因为Linux与Unicode无关(或者看起来似乎;我真的不知道,所以请纠正我如果我在这里讲故事) 这种当前样式自然会导致这种函数/类声明: 但是,如果thisdata包含unic ...

9 MinGW可移植性

我是C ++的新手,但是我已经创建了一个小程序,希望将程序移植到其他计算机上,但是当我“安装”程序时我得到了这个错误......-静态-libgcc -static-libstdc ++缺失,我应该在程序本身中包含一个文件,或者这是我必须在每台计算机上安装的库? 我希望运行该程序的计算机将是w ...

2012-05-18 15:57:56 1 882   c++/ mingw
10 dlfunc的可移植性?

我正在阅读关于FreeBSD上的dlopen和朋友的联机帮助页。 我正在开发一个跨平台应用程序,它使用共享库来加载可插件。 我以前从未这样做过,但我认为我对它的运作方式有了很好的把握。 manpage提到了dlsym(),它似乎是从共享库中获取函数指针的常用方法,以及dlfunc(),它可 ...

2009-07-17 15:44:46 2 806   c/ dlopen
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM