当前位置:  开发笔记 > 编程语言 > 正文

使用ios :: binary或ios :: out或两者打开文件有什么区别?

如何解决《使用ios::binary或ios::out或两者打开文件有什么区别?》经验,为你挑选了2个好方法。

我试图找出打开文件之间的区别,如:

fstream *fileName*("FILE.dat",ios::binary);

要么

fstream *fileName*("FILE.dat",ios::out);

要么

fstream *fileName*("FILE.dat",ios::binary | ios::out);

我发现,所有这些形式是相同的:在所有情况下,即使用产生该文件上的相同的输出*fileName*<<*fileName*.write().



1> Nick Bedford..:

ios::out 打开文件进行写作.

ios::binary确保读取或写入数据,而无需动态地转换新行字符\r\n.换句话说,你给流提供的正是你所写的内容.


因此,如果我没有将ifstream标记为二进制文件,并且从中读取10个双精度数,并且Windows在数据中找到随机的'\n',那么流将从`10*sizeof(double)`扩展为`插入10*sizeof(double)+ 1`作为`\ r``,然后覆盖我的双缓冲区的结尾?

2> 小智..:

使用ios :: binary打开文件控制如何处理换行符.在Windows上,它们扩展为CRLF对.就是这样 - 它对运算符<<的运行方式没有影响.


Unix人员,不耐烦的打字员,决定计算机应该处理"回车"和"换行",通过键入较少的字符来提高工作效率.这个新命令叫做"换行符".在某些输出系统上,您可以看到托架向左移动,纸张前进为每个"换行符",包括空行.C语言决定实现和平并让操作系统提供翻译(不使用`ios :: binary`)或不提供翻译(使用`ios :: binary`).`ios :: out`确定数据方向(*从计算机输出*).
很久以前,在Teletypes和打字机的时代,输出机器的车厢在打印字符时向左移动.一个命令,"回车",将马车向左移动.另一个命令"Linefeed"将纸张推进到下一行.这两个命令可以独立执行,以便纸张在中线前进(使用"Linefeed")或重写当前行(使用"Carriage Return").作为一对,它们使打印从下一行的左边缘开始.
CLRF代表回车,换行.这些是用于在Windows文本编码中指定新行的两个字节.它几乎是多余的,因为在计算机上,你真的只需要一个换行符.
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有