关于fstream的若干问题
一直习惯C语言的文件处理方式。最近尝试STL的fstream,发现若干问题,不能够理解。希望大虾们指点迷津。
首先感觉iostream等库对Unicode的支持不够方便。ANSI对象为cout,Unicode对象为wcout。不像〈tchar.h〉里面,可以用TCHAR、_T和_mbscpy这样的宏,可以随着ANSI或Unicode自行改变函数调用,极大地方便了我们使用。
其次,不明白std::wifstream的构造函数的第一个参数为什么是const char *。wifstream类型可是基于Unicode的啊。我的程序中都是Unicode字符,你要我传什么参数给你?我只好把wchar_t *转换成char *。这样还不如不用Unicode。
再次,如果我们使用binary方式的话,我们可爱的<<操作符仍然只能按照文本的方式来读写。我必须使用非常底层的read函数自行读写binary对象。可问题是Unicode方式下的read函数第一个参数为wchar_t *,无论我第二个参数(长度)是以BYTE为单位还是以WORD为单位,我都得不到正确的结果(ANSI方式下可得到正确的结果)。
最后,没看到介绍fstream的文章/书提到过异常。难道fstream不支持异常?如果真的不支持异常的话,对于像我这样的新手去编写一个健壮的程序是非常困难的。因为我不知道在文件打开以及读写的过程中都会发生哪些错误。我只能求神拜佛盼它千万别出错……
难道我真的要回到面向过程的时代使用_open这样的东西来处理程序?或者改用SDK来写?抑或弃用STL,拣起已成众矢之的的MFC来打开一个小小的文件读出几个字节然后关闭?
C/C++的一个令人心烦地方就是选择太多,令人无所适从。