读书人

问个宽字节文件的读入有关问题

发布时间: 2012-03-29 12:53:12 作者: rapoo

问个宽字节文件的读入问题
最近在写一个程序,若是英文名的文件就ok了,麻烦就来自中文文件。
程序里采用的读入方法是 std::ifstream 流,打开方式是 binary ,可这个流只能够打开 英文名的文件,文件中包含中文就不行了(似乎路径中有中文是无所谓的。)

然后就不得不采用 std::wifstream 可这个流只能够读成宽字符。这样我的类就得重写成两个版本?
实际上,我的要求十分简单,不管是中文名的文件,还是英文名的文件,能够正确打开,我不需要识别里面的内容,统一都读成 char 类型的,不知道这该怎么实现?

[解决办法]
用boost::locale。
[解决办法]

C/C++ code
int main(){    char command[100]="rename ";    strcmp(conmand,"【你的中文文件名】 [anyname ASCII]")    system(command);    ifstream ("[anyname ASCII]", ifstream::in);    //bla bla bla    ifstream.close;    char command2[100]="rename ";    strcmp(command2,"[anyname ASCII] 【你的中文文件名】");    return 0;}
[解决办法]
将文件名用双引号括住,再试试?
[解决办法]
C/C++ code
文件名是宽字符....其实楼主可以char name[] = "我爱你"; 然后iconv将name从gbk转成unicode存入u_name[], 然后:ifstream(u_name, ios::in);不过你也没说明文件创的时候怎么起的名, 是手动创的还是程序创的, 系统什么编码, 什么系统.
[解决办法]
用wifstream::read()好了,参数虽然是宽字符的,但我相信只要你强转一下即可,因为read()是把文件当作二进制来读的。

读书人网 >C++

热点推荐