VC2005への移行作業を今やっているところなんですが、
質問があります。
環境はWinXP、2003、MFCです。
2005で実行してみたところ、
日本語の入っているパスだと、文字化けしていてファイルを認識してくれません。
英語のみですとファイルを認識してくれます。
適切な対処方法を教えて下さい。
お願いします。
問題のコードを提示してもらえませんか?
これだけでは、憶測でしか回答できません。
憶測だけの回答で、質問者を惑わすのはあまりよくないですから。
> 環境はWinXP、2003、MFCです。
> 2005で実行してみたところ、
2005で実行とは?2003じゃないの?
移行とは 2003 -> 2005 で、2005でコンパイルしなおしているということですよね?
その際に出力されたWarningやError等があったらそれも提示してください。
(2003と2005ではデフォルトのコンパイルオプションが微妙に違います)
簡単な説明ですみませんでした。
2005でコンパイルをしなおしています。
Warningは、古い形式~というのが出ていますが、とりあえず無視しています。
エラーはありません。
char* path;
ifstream if(path);
if(!if)
return;
上記のようなコードでpathの中身がC:\フォルダ\test.txtのように
日本語が入っているパスだとファイルを認識しないでリターンします。
奥の方まで見たら、パスが文字化けをしていました。
VC2005の設定でプロパティの「マルチバイト文字を設定する」にはしてあります。
よろしくお願い致します。
似たようなスレッドがありました。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=243152&SiteID=7
tare さんのレスより
> locale::global(locale(japanese));
> をmainの最初に記述して、回避できませんかね。
としてみては如何でしょうか?
よく調べないですみません。
こういうスレッドがあったんですね。
InitInstance()の中に記述すればよいでしょうか?
locale::global(locale(japanese));をそのまま記述すれば
よいのでしょうか?
質問ばかりですみません。
今は環境が違うので試せませんが、
月曜に学校で試してみたいと思います。
> よく調べないですみません。
別の掲示板ですし、2005の情報はなかなか見つからないのでしょうがないですね。
> InitInstance()の中に記述すればよいでしょうか?
> locale::global(locale(japanese));をそのまま記述すれば
> よいのでしょうか?
ちょっとつくりがどうなっているのかわかりませんが、
適当なところに書いてみて、試行錯誤してみてください。
ところで、MFCならば、STLのifstream以外にも
CFileやCStdioFileもつかえますので、どうしても ifstream で解決できないときには
代替案としても考えてみてください。
(CFileやCStdioFileは普通につかえるっぽい。)
いろいろと試してみます。
ありがとうございます。