• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ACG狂人

            其實(shí)我更愛姐汁...

            記錄一下C++標(biāo)準(zhǔn)流感悟

                    今天終于完成了自己的日志庫核心的幾個(gè)類和算法,折騰了許久,感覺安全性很好,一些多線程的死鎖問題已經(jīng)逐個(gè)排除了。由于需要跟C++標(biāo)準(zhǔn)庫的輸入輸出流共事,所以么總算自認(rèn)為理解了C++標(biāo)準(zhǔn)流的一些特性,記下來以供備忘。
                    首先是文件流,關(guān)于該流的問題,要扯就扯遠(yuǎn)了,主要說一說std::wofstream的問題。不要被這個(gè)w騙了,其實(shí)它輸出到文件上的依然還是那么回事,沒有絲毫的變化。如果你是想輸出Unicode到文本文件中,那么你最好是用ios::binary模式,然后一股腦的倒入文件中,如果要是使用<<重載符號(hào)的話,輸出到文件中的跟std::ofstream沒區(qū)別,而且中文還無法輸出。如果你遇見中文無法輸出的問題,恩,可以調(diào)用std::wofstream::imbue()方法,具體也就是一行:ofs.imbue(std::locale("chs"));搞定。
            我想,C++標(biāo)準(zhǔn)庫并不支持Unicode編碼,而是給字符地域化的編碼方式,中文的可能也就是GBK吧,聽說C++0x標(biāo)準(zhǔn)會(huì)納入U(xiǎn)nicode編碼支持,如果是這樣的話就省心多了。
                    然后還有個(gè)不省心的地方就是流的streambuf中的緩沖大小了,我發(fā)現(xiàn),fstream中的寫緩沖居然一直是0啊,這個(gè)就很頭疼了,需要給文件流指定緩沖的大小。

            posted on 2009-07-29 23:46 釀妹汁 閱讀(1039) 評(píng)論(2)  編輯 收藏 引用 所屬分類: C++備忘

            評(píng)論

            # re: 記錄一下C++標(biāo)準(zhǔn)流感悟 2009-10-14 20:45 小羅

            樓主,我也遇到 wofstream 記錄中英文字符到文件的問題,部分代碼如下:

            wofstream n_FILE;
            n_FILE.open("文件路徑...", ios::binary);
            n_FILE.imbue(std::locale("chs"));

            char* chsFileInfo = new char[iFileSize];
            chsFileInfo = 從網(wǎng)絡(luò)傳過來的數(shù)據(jù)...(數(shù)據(jù)內(nèi)容可以包證)
            iRecvSize = 網(wǎng)絡(luò)接收到的數(shù)據(jù)長度

            int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)chsFileInfo, iRecvSize, 0, 0);
            if(nSize <= 0) return NULL;
            WCHAR* pwszDst = new WCHAR[nSize+1];
            if( NULL == pwszDst) return NULL;
            MultiByteToWideChar(CP_OEMCP, 0,(LPCSTR)chsFileInfo, iRecvSize, pwszDst, nSize);
            pwszDst[nSize] = 0;
            if( pwszDst[0] == 0xFEFF)
            for(int i = 0; i < nSize; i ++)
            pwszDst[i] = pwszDst[i+1];

            n_FILE.write(pwszDst, iRecvSize);


            可是記錄到文件中的數(shù)據(jù)會(huì)次到是到第一次出現(xiàn)中文的地方后面部分都沒有了。
            請(qǐng)問樓主有沒有解覺的辦法?
              回復(fù)  更多評(píng)論   

            # re: 記錄一下C++標(biāo)準(zhǔn)流感悟 2009-10-27 21:24

            windows的文本文件在存儲(chǔ)Unicode編碼的字符串時(shí)會(huì)在一開始加上兩個(gè)字節(jié)的,你可以用記事本保存出來一個(gè)Unicode的txt文件看看前面兩個(gè)字節(jié)是什么。  回復(fù)  更多評(píng)論   

            久久无码国产| 精品久久人人爽天天玩人人妻| 精品国产乱码久久久久久人妻| 亚洲AV无码久久寂寞少妇| 久久国产精品久久久| 久久青青国产| 久久精品国产99国产电影网| 久久久久久国产a免费观看黄色大片| 狠狠色狠狠色综合久久| 欧美777精品久久久久网| 欧美精品乱码99久久蜜桃| 欧美激情精品久久久久| 久久天堂AV综合合色蜜桃网| 久久久久无码专区亚洲av| 久久精品www人人爽人人| 中文字幕无码av激情不卡久久| 国产精品18久久久久久vr| 老男人久久青草av高清| 国産精品久久久久久久| 九九久久99综合一区二区| 天天影视色香欲综合久久| 亚洲国产精品久久久久婷婷老年 | 久久久精品人妻一区二区三区蜜桃 | 久久青青草原精品影院| 亚洲va久久久噜噜噜久久狠狠| 久久se这里只有精品| 久久成人国产精品二三区| 久久青青草原综合伊人| 99国产精品久久久久久久成人热| 狠狠色丁香久久婷婷综合图片| 久久人人爽人人爽AV片| 国产精品VIDEOSSEX久久发布| 久久er国产精品免费观看2| 久久精品中文无码资源站| 亚洲va中文字幕无码久久不卡| 大香伊人久久精品一区二区| 久久精品国产一区二区| 久久中文字幕无码专区| 亚洲精品99久久久久中文字幕| 亚洲а∨天堂久久精品| 午夜肉伦伦影院久久精品免费看国产一区二区三区 |