Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可移植fstream文件路径的正确语法是什么?_C++_File Io_Fstream - Fatal编程技术网

C++ 可移植fstream文件路径的正确语法是什么?

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文件路径不可移植。(

我一次又一次地看到这个恼人的问题。你能分享一下你的知识吗?这可能会帮助我们找到答案

我的困惑是,正斜杠是posix标准,但操作系统的目录结构不同

多谢各位

可移植fstream文件路径的正确语法是什么? (例如,传递给std::fstream:open()以打开文件的字符串。)

A.“::目录:file.bin”

B.“C:/Directory/File.bin”

C.“/directory/file.bin”

D.“C://目录//文件.bin”

E.std:fstream文件路径不可移植。

(E)-没有可移植标准,因为不同的文件系统和操作系统有不同的期望和限制
fstream
s不会将您限制为所有实际实现中始终支持的最小子集,否则您只能将“8.3”文件名写入当前工作目录-P


也就是说,如果您对这个“问题空间”感兴趣,您可能会想查看,它不是标准的,但至少是广为人知的….

E:不可移植,即定义了实现

答案可在文件中找到:(由via引用)

注释

文件名的格式是实现定义的,而不是 必须引用文件(例如,它可能是控制台或其他 可通过文件系统API访问的设备)。在支持 其中,文件名可能包括绝对或相对文件系统路径


您和我们中的许多人热切期待的是文件系统技术规范:

主要是C++中的代码>升压/文件系统< /代码>的导入。 该技术规范已作为C++的

实验部分提供。但是,默认情况下,gcc 4.9.2或Visual Studio 2013中没有实现这一点

祝你早日康复

您可以在此处查看更多信息:

您特别需要的是
路径


不过,为了在“现在”中回答您的问题,如果您希望这样做,您需要使用
#ifdef
s并在每个目标平台上实现您的代码。

路径是不可移植的。尝试使用可移植语法是徒劳的,因为您提出的任何语法都可能无法在未来的文件系统之间移植。但是,应该可以执行以下操作之一:

  • 设计应用程序,以便不需要存储路径
  • 使用您自己的路径格式,您可以将其转换为当前系统上的路径
  • 将应用程序使用的路径限制为可移植(在Windows/Linux之间)子集(例如:以“/”作为路径分隔符的相对路径)
  • 为同一路径存储多个版本,并在每个受支持的操作系统上使用正确的版本
  • 存储一种形式的路径(例如Linux路径),并使用简单的方案转换为Windows路径。记录此方案,以便用户了解如何解释路径

  • 我在这里写了更多内容:

    通过参考文档来回答非常好,非常感谢。您可以采用Boost文件系统库,它提供了可移植的路径名。看见