青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 5, 文章 - 0, 評論 - 13, 引用 - 0
數(shù)據(jù)加載中……

vc2008 fstream不支持中文路徑的解決方案

     項目編譯后給朋友試運行,發(fā)現(xiàn)運行出錯,提示路徑不正確找不到配置文件。因為朋友是放在桌面運行的,于是推測是中文路徑的問題(因為路徑中包含"桌面"兩個漢字)。反應(yīng)很詫異,什么年代了,還有中文路徑的問題...
     跟蹤了一下ifstream的open函數(shù),發(fā)現(xiàn)ifstream在打開文件之前會通過_mbstowcs_l_helper函數(shù)把文件路徑從mutilbyte轉(zhuǎn)換到unicode。其中的關(guān)鍵轉(zhuǎn)換函數(shù)如下:
 if (_loc_update.GetLocaleT()->locinfo->lc_handle[LC_CTYPE] == _CLOCALEHANDLE)
        {
            
/* C locale: easy and fast */
            
while (count < n)
            {
                
*pwcs = (wchar_t) ((unsigned char)s[count]);
                
if (!s[count])
                    
return count;
                count
++;
                pwcs
++;
            }
            
return count;

        } 
    而vc的默認local信息就是_CLOCALEHANDLE,于是中文字符很悲劇的被轉(zhuǎn)換成了莫名其妙的一串東西。google了下,似乎很多人碰到了這個問題,也沒有特別好的解決方案,要不直接unicode,要不每次調(diào)用fstream前后都調(diào)用一遍setlocal,對代碼的侵入性都很強。
    我做了個封裝的解決方案,使用個模板類對fstream做一個wrapper,代碼如下:
template<class T>
struct fstream_fix
    :
public T
{
    fstream_fix(){};

    template
<class T1>
    fstream_fix(T1 v1){
        setlocale(LC_CTYPE, 
".936");
        T::open(v1);
        setlocale(LC_CTYPE, 
0);
    }

    template
<class T1,class T2>
    fstream_fix(T1 v1,T2 v2){
        setlocale(LC_CTYPE, 
".936");
        T::open(v1,v2);
        setlocale(LC_CTYPE, 
0);
    }


    template
<class T1>
    
void open(T1 v1){
        setlocale(LC_CTYPE, 
".936");
        T::open(v1);
        setlocale(LC_CTYPE, 
0);
    }

    template
<class T1,class T2>
    
void open(T1 v1,T2 v2){
        setlocale(LC_CTYPE, 
".936");
        T::open(v1,v2);
        setlocale(LC_CTYPE, 
0);
    }
};

#define ifstream fstream_fix<ifstream>
#define ofstream fstream_fix<ofstream>
    OK.完美,對原項目沒有任何影響,ifstream fi(filepath);filepath中含有中文也能正常工作了。:) 當(dāng)然要注意的是,在宏定義之后,就不能再include <fstream>,不然可能會有編譯錯誤。



posted on 2010-03-10 19:19 clane 閱讀(3887) 評論(5)  編輯 收藏 引用 所屬分類: C++

評論

# re: vc2008 fstream不支持中文路徑的解決方案  回復(fù)  更多評論   

wifstream ??
2010-03-10 22:34 | WXX

# re: vc2008 fstream不支持中文路徑的解決方案  回復(fù)  更多評論   

setlocal一次就可以了,不少函數(shù)都依賴這個。
2010-03-11 15:29 | 壞人

# re: vc2008 fstream不支持中文路徑的解決方案  回復(fù)  更多評論   

@WXX
這樣的話,要修改項目里所有的傳入path為unicode...
2010-03-11 15:57 | clane

# re: vc2008 fstream不支持中文路徑的解決方案[未登錄]  回復(fù)  更多評論   

頂樓主
2010-03-11 16:15 | Bill Hsu

# re: vc2008 fstream不支持中文路徑的解決方案  回復(fù)  更多評論   

setlocale(LC_CTYPE, ".936");應(yīng)該改為:

setlocale(LC_ALL,"");

這樣更好
2010-03-13 11:51 | Bill Hsu
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产成人久久综合一区| 久久久久久久综合日本| 中文亚洲免费| 亚洲免费av片| 日韩一区二区免费看| 亚洲精品一区二区三区樱花| 亚洲毛片视频| 一本色道久久综合亚洲精品婷婷 | 亚洲无亚洲人成网站77777| 亚洲精品视频在线播放| 亚洲另类黄色| 亚洲免费一区二区| 久久精品论坛| 欧美国产极速在线| 亚洲免费观看视频| 亚洲视频久久| 久久精品国产91精品亚洲| 久久亚洲国产精品日日av夜夜| 裸体丰满少妇做受久久99精品| 欧美国产91| 国产精品国产a级| 精品动漫一区| 亚洲综合精品一区二区| 久久亚洲精品欧美| 亚洲毛片av在线| 亚洲欧美在线另类| 老司机精品福利视频| 国产精品久久久爽爽爽麻豆色哟哟| 激情久久久久久| 亚洲素人在线| 美女精品自拍一二三四| 亚洲毛片在线观看.| 久久成人一区| 欧美日韩中国免费专区在线看| 国产日韩欧美精品在线| 亚洲精品偷拍| 免费观看国产成人| 亚洲一区区二区| 欧美精品在线一区| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲视频网在线直播| 免费欧美网站| 性做久久久久久| 欧美日韩免费一区二区三区视频 | 能在线观看的日韩av| 一区二区欧美激情| 亚洲精品人人| 国产片一区二区| 欧美一区高清| 欧美成人午夜激情| 亚洲毛片在线观看| 国产精品成人一区| 国产日韩一区欧美| 国产精品免费视频观看| 国产永久精品大片wwwapp| 亚洲高清久久网| 国产一区二区精品丝袜| 欧美阿v一级看视频| 欧美激情一区二区三区四区| 午夜精品一区二区在线观看| 欧美大香线蕉线伊人久久国产精品| 欧美午夜在线一二页| 一区在线电影| 久久精品国产91精品亚洲| 国产精品99久久久久久有的能看| 欧美成年人视频| 精品91免费| 久久亚洲视频| 欧美在线二区| 国产综合欧美| 久久夜色精品国产欧美乱极品| 欧美一区三区二区在线观看| 国产人久久人人人人爽| 午夜精品网站| 小黄鸭精品aⅴ导航网站入口| 欧美四级在线观看| 亚洲图片欧美午夜| 亚洲男人的天堂在线| 国产精品免费福利| 亚洲欧美视频一区| 亚洲欧美国产高清| 国产一区二区三区直播精品电影| 性欧美1819性猛交| 午夜精品久久久久久久久久久久久| 国产精品久99| 久久精品一区二区| 老司机成人网| 日韩视频专区| 亚洲一区二区三区视频| 国产精品久久久久久久9999| 欧美在线视频导航| 久久综合给合| 亚洲欧美激情四射在线日| 欧美一级夜夜爽| 亚洲在线一区二区| 国内成人在线| 亚洲美女性视频| 国产综合色在线| 亚洲精品一区在线观看| 国产精品久久激情| 久久欧美肥婆一二区| 欧美va亚洲va香蕉在线| 亚洲欧美精品在线观看| 久久久噜噜噜久久久| 亚洲午夜女主播在线直播| 欧美一区二区| 中文日韩电影网站| 欧美一区观看| 在线亚洲国产精品网站| 欧美一区午夜视频在线观看| 日韩视频在线一区二区三区| 先锋影院在线亚洲| 日韩系列在线| 久久久综合香蕉尹人综合网| 洋洋av久久久久久久一区| 久久九九国产| 欧美在线你懂的| 欧美日韩一区二区视频在线| 美女诱惑黄网站一区| 欧美视频在线不卡| 老鸭窝亚洲一区二区三区| 国产精品久久福利| 亚洲国产婷婷| 在线观看视频一区二区| 亚洲综合精品一区二区| 一区二区三区免费观看| 蜜桃av一区二区三区| 久久男人资源视频| 欧美性色综合| 亚洲精品欧美日韩专区| 亚洲精品黄网在线观看| 久久一二三四| 美女诱惑一区| 韩国一区电影| 午夜一区二区三视频在线观看| 亚洲天堂第二页| 欧美日韩国产在线| 亚洲国产综合在线| 亚洲精品久久久久| 麻豆乱码国产一区二区三区| 久久久久国产一区二区| 国产欧美亚洲精品| 亚洲欧美日韩中文播放| 亚洲——在线| 国产乱码精品1区2区3区| 亚洲一本大道在线| 欧美一区二区三区精品| 国产区欧美区日韩区| 欧美在线视频播放| 久久蜜桃av一区精品变态类天堂| 国产伦精品一区二区三区照片91 | 一区二区久久| 亚洲在线视频一区| 国产乱理伦片在线观看夜一区| 亚洲欧美日韩中文在线制服| 欧美母乳在线| 亚洲综合第一| 国产精品黄页免费高清在线观看| 夜夜狂射影院欧美极品| 亚洲一区二区动漫| 国产精品一区二区三区四区五区 | 美女精品自拍一二三四| 欧美激情视频一区二区三区不卡| 亚洲免费高清| 国产精品女人网站| 欧美自拍丝袜亚洲| 亚洲日本欧美在线| 午夜精品成人在线| 激情六月综合| 欧美全黄视频| 欧美一区二区高清| 亚洲国产另类久久精品| 亚洲综合电影一区二区三区| 国语自产在线不卡| 欧美精品一区二区三区蜜桃 | 中文日韩在线视频| 国产亚洲精品久久久| 老牛嫩草一区二区三区日本| 一区二区冒白浆视频| 久久中文久久字幕| 亚洲视频一区在线观看| 国产在线播精品第三| 欧美日韩精品伦理作品在线免费观看 | 亚洲三级色网| 久久久精品免费视频| 日韩一区二区精品在线观看| 国产综合网站| 国产精品海角社区在线观看| 久久综合狠狠综合久久综青草| 一区二区欧美国产| 欧美激情一区在线观看| 欧美亚洲网站| 在线视频欧美一区| 亚洲经典三级| 国产一区二区精品丝袜| 国产精品盗摄一区二区三区| 欧美精品亚洲一区二区在线播放| 久久成人精品| 欧美一级理论片| 亚洲图片欧美日产|