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】

相关文章
|
8月前
|
存储 C++
CPP的基本输入输出流
CPP的基本输入输出流
81 0
|
8月前
|
C++ 开发者
深入探索CPP的基本输入输出流
深入探索CPP的基本输入输出流
53 0
|
7月前
|
编译器 C语言 C++
C++中.h和.hpp文件有什么区别?
C++中.h和.hpp文件有什么区别?
|
安全 PHP
攻防世界-file_include(convert.iconv的使用)
攻防世界-file_include(convert.iconv的使用)
179 0
|
8月前
|
存储 缓存 程序员
C++ 文件读写:探索 ofstream, ifstream 和 fstream 的奥秘
C++ 文件读写:探索 ofstream, ifstream 和 fstream 的奥秘
613 0
|
8月前
|
C++
cpp ofstream ifstreram binary 文档读写
cpp ofstream ifstreram binary 文档读写
56 0