问个宽字节文件的读入问题
最近在写一个程序,若是英文名的文件就ok了,麻烦就来自中文文件。
程序里采用的读入方法是 std::ifstream 流,打开方式是 binary ,可这个流只能够打开 英文名的文件,文件中包含中文就不行了(似乎路径中有中文是无所谓的。)
然后就不得不采用 std::wifstream 可这个流只能够读成宽字符。这样我的类就得重写成两个版本?
实际上,我的要求十分简单,不管是中文名的文件,还是英文名的文件,能够正确打开,我不需要识别里面的内容,统一都读成 char 类型的,不知道这该怎么实现?
[解决办法]
用boost::locale。
[解决办法]
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;}
[解决办法]
将文件名用双引号括住,再试试?
[解决办法]
文件名是宽字符....其实楼主可以char name[] = "我爱你"; 然后iconv将name从gbk转成unicode存入u_name[], 然后:ifstream(u_name, ios::in);不过你也没说明文件创的时候怎么起的名, 是手动创的还是程序创的, 系统什么编码, 什么系统.
[解决办法]
用wifstream::read()好了,参数虽然是宽字符的,但我相信只要你强转一下即可,因为read()是把文件当作二进制来读的。