fstream,FILE之间的选择

简介: 作为一个C++的拥护者,我尽量多学习使用 ifstream, ofstream,并从中感受到了它的直观易用。而且其对于普通英文字符串输入输出的支持,体现出了C++语言的智慧。

作为一个C++的拥护者,我尽量多学习使用 ifstream, ofstream,并从中感受到了它的直观易用。而且其对于普通英文字符串输入输出的支持,体现出了C++语言的智慧。

但当你想打开Unicode编码的文件路径,当你想要输入Unicode编码中文字符,当你想要用wofstream输出二进制流的时候,你会发现,你对它的了解还不够,它并不总能像你想象那样工作。

之所以会产生这种结果,有两点原因:

  1. C++ locale默认是英文环境,英文环境会导致无法识别Unicode编码。
  2. fstream 的 opterator>> 操作符,其实是字符串操作符。有时候你会以为它可以帮你处理二进制流。当然fstream也支持二进制流操作,但是wfstream却必须以wchar_t的大小为单位流化,导致流化的数量必须写成 sizeof( int ) / 2.
通过我自身的使用情况,我总结:
  1. fstream接口操作多种多样,但容易引起bug,因为你不总是在处理文件,时间久了,会忘记fstream的一些重要特性。
  2. FILE接口操作统一,虽然有时对于简单功能,需要多写一些代码,但是简单统一,使得你总是很了解它,出错的概率较低。
最后总结:如果你不能十分确信自己很了解fstream所有特性,且你需要短时间内写出bug尽量少的代码, 那么我向你推荐【FILE, fread, fwrite】

相关文章
|
3月前
|
C++
cpp ofstream ifstreram binary 文档读写
cpp ofstream ifstreram binary 文档读写
16 0
Cannot open include file: 'unistd.h': No such file or directory的解决办法
Cannot open include file: 'unistd.h': No such file or directory的解决办法
272 0
|
开发工具 C++ 开发者
关于QT_BEGIN_NAMESPACE宏的作用
关于QT_BEGIN_NAMESPACE宏的作用