我有一个需要在 *nix 和 windows 下运行的程序。因为程序从文件中获取文件路径,所以问题是如何处理\
vs/
问题。
我目前的想法是放入一个正则表达式,根据我使用的系统将错误的转换为正确的。这将具有让任一类型在任一系统上工作的效果。除了现在我有两个问题之外,还有人看到其他问题吗?
(非常欢迎其他更好的解决方案)
编辑:主要问题是让 Windows 路径在 unix 上工作,而不是相反。
我有一个需要在 *nix 和 windows 下运行的程序。因为程序从文件中获取文件路径,所以问题是如何处理\
vs/
问题。
我目前的想法是放入一个正则表达式,根据我使用的系统将错误的转换为正确的。这将具有让任一类型在任一系统上工作的效果。除了现在我有两个问题之外,还有人看到其他问题吗?
(非常欢迎其他更好的解决方案)
编辑:主要问题是让 Windows 路径在 unix 上工作,而不是相反。
/ 在 win32 中也完全支持。
另请参阅此相关问题
Windows 通常会接受 \ 或 /,因此只要您完全控制文件名,对 / 进行标准化可能会使您的问题更简单。
您是否考虑过创建一个“文件管理器”类来为您处理所有文件路径问题?这样,在您的邮件应用程序中,当您加载数据文件时,您可以调用类似这样的内容。
LoadApplicationData(FileManager.GetDataFilePath)
然后您的文件管理器将检测它所在的环境并返回正确的文件路径选项。这样,您也可以适应 Win32 与 Unix 位置标准(如 Program Files 与 /usr 或其他)。
请注意,当您考虑驱动器号(在 Unix 上没有模拟)和特殊的“分叉”(MacOS pre-X 术语 - 通常在 Unix 上也没有模拟,尽管 MacOS X 有它们 - 惊喜,惊喜)时,Win32 路径是复杂的提供。当心。
为您的输入创建一个解析器,以创建表示目录的节点的树结构。然后,您可以通过遍历树并编写您想要的任何分隔符或可选地执行不同的操作来“保存”,例如检查目录是否存在或编写元文件。这实际上是我现在认为对我自己的应用程序有用的东西:-)
您还没有告诉我们您正在从中读取路径的文件类型。我将假设它们是配置文件。在这种情况下,有很多方法,恕我直言,正确的答案是设计您的程序以避免操纵路径,如果可能的话。我在这里发布了一个答案:https ://stackoverflow.com/a/40980510/2345997这是相关的。
方法: