- ベストアンサー
日本語名ディレクトリーから日本語名ファイルを読込方法
超初心者です。 C又はC++にて日本語名ディレクトリーから日本語名テキストファイルを読み込みたいのですがどの様な関数?を使えば良いのでしょか。 ちなみに、英文字名は読み込む事ができました。 OSはWindows XP HomeでVisual C++ 2005 Express Edition です。 調査が不十分かも知れませが、中々たどり着きません。 超初心者ですので、どなたかアドバイスを頂ければ幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> fstream fs; この行の上に locale::global(locale("japanese")); 又は setlocale(LC_ALL, "japanese"); と書いた行を挿入すればファイルが見つかり読み込めます。 ところが…… > Visual C++ 2005 Express Edition このバージョンの場合は locale 指定するとまともな動作をしません。 ファイルの中に全角文字があるとその部分から表示が出なくなります。 次の URL では wcout...(※ となってますが cout でも同じことが起きます。 wcoutのlocale http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=250724&SiteID=7 ※) ワイド文字を扱う場合には cout ではなく wfstream や wcout 使うからです。 このようにお使いのバージョンでは locale を指定するとうまく動作しませんので locale は使わずに > fs.open("I:\\勉強\\あtest0.txt",ios::in); この部分のファイル名の指定している引数に「L」を挿入して const wchar_t * と して扱うようにされるとよろしいかと思います。 fs.open(L"I:\\勉強\\あtest0.txt",ios::in); 第一引数に const wchar_t * も使えますので問題はなと思いますが、これはバグの 回避策であって、本来は locale を指定するのが正しいことかと思われます。 ※ Visual C++ 2008 Express Edition は問題ありませんでした。
その他の回答 (1)
- x415f484f
- ベストアンサー率71% (57/80)
> C又はC++にて C と C++ のどちらなのでしょう? > ちなみに、英文字名は読み込む事ができました。 そう仰られるのであれば英数字名で読み込むことができたコードを提示して頂けないでしょうか? そうなさって頂ければ、問題や原因などがわかり解決に繋がると思われます。
補足
早速のご回答ありがとうございます。言葉足らず申し訳ありませんでした。宜しくお願いします。 >C と C++ のどちらなのでしょう? は、C++を考えていますが、CでもOKです、参考にして勉強します。 > ちなみに、英文字名は読み込む事ができました。 は、お恥ずかしい限りですが参考資料の説明例題を日本語名にしたものです。 #include <algorithm> #include <fstream> #include <iostream> #include <stdio.h> using namespace std; int main() { fstream fs; fs.open("I:\\勉強\\あtest0.txt",ios::in); if (!fs) { cout<<"ファイルが開けません"<<endl; return 0; } char c; while (!fs.eof()) { fs.read(&c,1); cout<<c; } return 0; }
お礼
速攻のご対応誠にありがとうございます。 最近Cの勉強を始めたばかりで直ぐに壁に当たってしまいます。 私にとっては殆どが高い壁です。挫折せずにを続けて行くつもりですので、今後も宜しくお願いします。 本件も、ご回答を基に私なりに咀嚼したいと思います。