VC2005で実行するとパスが文字化けします。

[戻る]
KENZI 2006/06/02(金) 22:58:47
VC2005への移行作業を今やっているところなんですが、
質問があります。
環境はWinXP、2003、MFCです。
2005で実行してみたところ、
日本語の入っているパスだと、文字化けしていてファイルを認識してくれません。
英語のみですとファイルを認識してくれます。
適切な対処方法を教えて下さい。
お願いします。

Blue 2006/06/03(土) 00:11:15
問題のコードを提示してもらえませんか?
これだけでは、憶測でしか回答できません。

憶測だけの回答で、質問者を惑わすのはあまりよくないですから。


> 環境はWinXP、2003、MFCです。
> 2005で実行してみたところ、
2005で実行とは?2003じゃないの?

移行とは 2003 -> 2005 で、2005でコンパイルしなおしているということですよね?
その際に出力されたWarningやError等があったらそれも提示してください。
(2003と2005ではデフォルトのコンパイルオプションが微妙に違います)

KENZI 2006/06/03(土) 00:43:31
簡単な説明ですみませんでした。
2005でコンパイルをしなおしています。
Warningは、古い形式〜というのが出ていますが、とりあえず無視しています。
エラーはありません。

char* path;
ifstream if(path);

if(!if)
    return;

上記のようなコードでpathの中身が"C:\フォルダ\test.txt"のように
日本語が入っているパスだとファイルを認識しないでリターンします。
奥の方まで見たら、パスが文字化けをしていました。

VC2005の設定でプロパティの「マルチバイト文字を設定する」にはしてあります。
よろしくお願い致します。

Blue 2006/06/03(土) 01:10:59
似たようなスレッドがありました。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=243152&SiteID=7

tare さんのレスより
>    locale::global(locale("japanese"));
> をmainの最初に記述して、回避できませんかね。
としてみては如何でしょうか?

KENZI 2006/06/03(土) 01:23:40
よく調べないですみません。
こういうスレッドがあったんですね。
InitInstance()の中に記述すればよいでしょうか?
locale::global(locale("japanese"));をそのまま記述すれば
よいのでしょうか?
質問ばかりですみません。

今は環境が違うので試せませんが、
月曜に学校で試してみたいと思います。

Blue 2006/06/03(土) 01:36:24
> よく調べないですみません。
別の掲示板ですし、2005の情報はなかなか見つからないのでしょうがないですね。

> InitInstance()の中に記述すればよいでしょうか?
> locale::global(locale("japanese"));をそのまま記述すれば
> よいのでしょうか?
ちょっとつくりがどうなっているのかわかりませんが、
適当なところに書いてみて、試行錯誤してみてください。


ところで、MFCならば、STLのifstream以外にも
CFileやCStdioFileもつかえますので、どうしても ifstream で解決できないときには
代替案としても考えてみてください。
(CFileやCStdioFileは普通につかえるっぽい。)

KENZI 2006/06/03(土) 08:55:05
[[解決]]
いろいろと試してみます。
ありがとうございます。

古いスレッドには追加発言できません。