文件写入,插入运算符和写入函数的区别?

Posted

技术标签:

【中文标题】文件写入,插入运算符和写入函数的区别?【英文标题】:File writing, difference in insertion operator and write function? 【发布时间】:2014-07-02 11:26:11 【问题描述】:

我想知道插入运算符(和函数write()有什么区别,因为下面给出的行代码

outFile << "Hello world";

还有

outFile.write("Hello world");         

当我试图在文本文件中写入字符串“Hello world”时,这两个都达到了我想要的结果。那么这两者有什么区别呢? 以及为什么插入操作符可以写入文件时还需要write()函数?

【问题讨论】:

【参考方案1】:

那么这两者有什么区别呢?

主要区别在于第二个不会编译。 write 有两个参数,用于写入一个已知大小的字符序列:

outFile.write("Hello world", 11);

当您已经有一个包含要输出的字符序列的数组时,请使用此无格式输出

格式化输出的插入运算符用于格式化许多不同的类型(包括以零结尾的字符串,如您的示例所示)。例如:

outFile << "Hello world";  // outputs the string (no need to specify the size)
outFile << 42;             // outputs "42", formatting the integer as text

【讨论】:

:v 很好,当然它不会编译。但是我仍然无法理解插入运算符?请多解释。 @shujat7: &lt;&lt; 将接受任何输入:string、int、char*、whathaveyou,将其转换为字符串然后写入。 (当然,如果类型不能隐式转换,就会失败)。 @shujat7:我添加了几个使用&lt;&lt; 的示例。当您希望流弄清楚如何格式化您输出的任何类型时使用它(数字类型、指针、std::string、像您的示例一样的 C 样式字符串,以及任何其他具有适当重载 &lt;&lt; 的类型)。 【参考方案2】:

write() 是未格式化的输出,只需要 const char * 和 int。它也不会在失败时设置失败位。如需更多信息,请查看here。运算符&lt;&lt; 具有格式化和未格式化的重载。

【讨论】:

以上是关于文件写入,插入运算符和写入函数的区别?的主要内容,如果未能解决你的问题,请参考以下文章

把数据写入txt中 open函数中 a与w的区别

平滑运算符:在写入文件时重命名文件

使用 IOUtils 和 ImageIO 写入图像文件有啥区别

如何将整数写入文件(fprintf 和 fwrite 的区别)

MySQL数据写入后显示NULL

保存/写入/存储和读取/加载之间的语义差异?