C++ 可移植fstream文件路径的正确语法是什么?
我一次又一次地看到这个恼人的问题。你能分享一下你的知识吗?这可能会帮助我们找到答案 我的困惑是,正斜杠是posix标准,但操作系统的目录结构不同 多谢各位 可移植fstream文件路径的正确语法是什么? (例如,传递给std::fstream:open()以打开文件的字符串。) A.“::目录:file.bin” B.“C:/Directory/File.bin” C.“/directory/file.bin” D.“C://目录//文件.bin” E.std:fstream文件路径不可移植。(E)-没有可移植标准,因为不同的文件系统和操作系统有不同的期望和限制C++ 可移植fstream文件路径的正确语法是什么?,c++,file-io,fstream,C++,File Io,Fstream,我一次又一次地看到这个恼人的问题。你能分享一下你的知识吗?这可能会帮助我们找到答案 我的困惑是,正斜杠是posix标准,但操作系统的目录结构不同 多谢各位 可移植fstream文件路径的正确语法是什么? (例如,传递给std::fstream:open()以打开文件的字符串。) A.“::目录:file.bin” B.“C:/Directory/File.bin” C.“/directory/file.bin” D.“C://目录//文件.bin” E.std:fstream文件路径不可移植。(
fstream
s不会将您限制为所有实际实现中始终支持的最小子集,否则您只能将“8.3”文件名写入当前工作目录-P
也就是说,如果您对这个“问题空间”感兴趣,您可能会想查看,它不是标准的,但至少是广为人知的….E:不可移植,即定义了实现 答案可在文件中找到:(由via引用) 注释 文件名的格式是实现定义的,而不是 必须引用文件(例如,它可能是控制台或其他 可通过文件系统API访问的设备)。在支持 其中,文件名可能包括绝对或相对文件系统路径
您和我们中的许多人热切期待的是文件系统技术规范:
主要是C++中的代码>升压/文件系统< /代码>的导入。 该技术规范已作为C++的
实验部分提供。但是,默认情况下,gcc 4.9.2或Visual Studio 2013中没有实现这一点
祝你早日康复
您可以在此处查看更多信息:
您特别需要的是路径
:
不过,为了在“现在”中回答您的问题,如果您希望这样做,您需要使用#ifdef
s并在每个目标平台上实现您的代码。路径是不可移植的。尝试使用可移植语法是徒劳的,因为您提出的任何语法都可能无法在未来的文件系统之间移植。但是,应该可以执行以下操作之一:
设计应用程序,以便不需要存储路径
使用您自己的路径格式,您可以将其转换为当前系统上的路径
将应用程序使用的路径限制为可移植(在Windows/Linux之间)子集(例如:以“/”作为路径分隔符的相对路径)
为同一路径存储多个版本,并在每个受支持的操作系统上使用正确的版本
存储一种形式的路径(例如Linux路径),并使用简单的方案转换为Windows路径。记录此方案,以便用户了解如何解释路径
我在这里写了更多内容:通过参考文档来回答非常好,非常感谢。您可以采用Boost文件系统库,它提供了可移植的路径名。看见