我一次又一次地看到这个恼人的问题。请您分享您的知识,这可能有助于我们找到答案。
我的困惑是,正斜杠是posix标准,但操作系统的目录结构是不同的。
谢谢
(例如,您将传递给std :: fstream:open()以打开文件的字符串。)
一个。 " ::目录:file.bin"
B中。 " C:/Directory/File.bin"
℃。 " /directory/file.bin"
d。 " C://Directory//File.bin"
电子。 std:fstream文件路径不可移植。
答案 0 :(得分:4)
E :不可移植,即实施定义
答案可以在std::fopen
文档中找到:( fstream通过filebuf::open引用)
注释
文件名的格式是实现定义的,而不是 必须指一个文件(例如它可能是控制台或另一个 设备可通过文件系统API访问)。在支持的平台上 它们,filename可以包括绝对或相对文件系统路径。
答案 1 :(得分:4)
我们和其他许多人热切期待的是文件系统技术规范:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4099.html
这主要是将boost/filesystem
导入C ++标准。
技术规范已作为C ++ experimental
部分的一部分提供。但是,默认情况下,这不是在gcc 4.9.2或Visual Studio 2013中实现的。
希望它能在即将到来!
您可以在此处查看更多信息:http://en.cppreference.com/w/cpp/experimental/fs
您专门寻找的是path
:http://en.cppreference.com/w/cpp/experimental/fs/path
现在通过回答您的问题,如果您正在寻找这样做,则需要使用#ifdef
并在每个目标平台上实施您的代码。
答案 2 :(得分:1)
(E) - 没有便携式标准,因为不同的文件系统和操作系统有不同的期望和限制。 fstream
不会将您限制在所有实际实施的最低始终支持的子集中,或者您只能编写" 8.3"文件名到当前工作目录;-P
也就是说,如果您对此问题空间感兴趣,那么您可能想要查看boost filesystem library,这不是标准版,但是在最不为人知的....
答案 3 :(得分:0)
路径不可移植。尝试使用可移植语法是徒劳的,因为您提出的任何文件都可能无法在未来的文件系统之间移植。但是,应该可以执行以下操作之一:
我在这里写了更多内容:https://stackoverflow.com/a/40980510/2345997