关于宽字符

来源:互联网 发布:希尔排序算法如何稳定 编辑:程序博客网 时间:2024/04/29 15:20

这几天在网上查了好多东西,就是为了明白款字符输入输出流的使用,总算还有点收获,

1) 宽字符输出:

           #include <iostream>
           #include <string>
           #include<fstream>
           #include<locale>

          using namespace std; 

          void main(){
                 wstring ws = L"我a1.txt";                                                         //定义生成的文件名
                 wstring wContent =L"/n中文测试aa121";                            //定义宽字符串,用来输出的文件
                 wofstream wfs;                                                                        //宽字符输出流 

                 wfs.open(ws.c_str(),ios_base::app|ios_base::binary);  //打开文件,
                 wfs.imbue(std::locale("chs"));                                              //设置输出流的imbue属性很重要

                  wfs<<wContent<<"/n/r";                                                        //将字符串输出
                  wfs<<ws<<"/n/r";                                                                    //输出换行,回车,但是显示的是乱码,

                  wfs.close();                                                                             //关闭流

                int a;                   //防止像在vc.net2005中那样控制台一闪而过;此处没什么用处
                cin>>a;
}

 

2)  读取:

#include <iostream>
#include <string>
#include <fstream>
#include <locale>

using namespace std;

#ifndef _UNICODE
#define _UNICODE           //定义_UNICODE
#endif

#ifndef UNICODE
#define UNICODE            //定义UNICODE
#endif

int main(void)
{

locale loc("chs");                //定义locale对象,用来设置输入流的imbue()


wifstream file;                    //定义输入流


file.imbue(loc);                 //使用locale对象loc来设置款字符输入流的imbue();这个要在打开文件之前设置


file.open("test.txt", ios::binary);      //打开文件

if (!file.is_open())
{
cerr << "file open error." << endl;  //文件如果没有打开,输出错误提示并返回
return -1;
}

wstring line;                                      //定义wstring对象,临时保存从文件中读取的字符串


int line_num=0;                               //统计读取的行数


wofstream file2;                              //输出流,将保存在line中的字符串输出


file2.imbue(loc);                              //设置file2的imbue();,要在打开文件之前设置
file2.open("test3.txt", ios::binary);  //打开文件


file2 << "/0xFEFF";                            //暂时还不知道啥意思这里,不过好像去掉了生成的文件还是可以用这个main方法来读取


wcout.imbue(loc);                           //设置wcout的imbue();


while (!file.eof())                               //开始读取,并输出到文件
{

line=L"";                                             //赋值前先将line置空
file >> line;

wcout << line << endl;                   //输出到控制台

file2 << line << endl;                     //输出到文件
}


file.close();
file2.close();                                     //关闭两个流

int a;
cin>>a;                                               //防止控制台一闪而过

return 0;                                            
}

 

这里还有好多我不明白的地方,只是找了好久有没有找到一个能将一下使用wifstream/wofstream输入输出的文章或者帖子,我就发一个,以作抛砖引玉之用,大家可以共同学习

原创粉丝点击