ファイルダイアログで、ファイルの内容を取得できない

解決


ユニコードも初心者  2008-05-31 16:59:43  No: 68444

VISTA  MFC  ユニコードです。

ファイルダイアログを呼び出して、ディレクトリにあるテキストファイルを読む場合、

CString ss, str;
CFileDialog myDLG(TRUE, _T("txt"), _T(".txt"), 
    OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("テキスト(*.txt)|*.txt|すべて(*.*)|*.*||"), NULL );
if ( myDLG.DoModal() == IDOK ) {
    CStdioFile fin(myDLG.GetPathName(), CFile::modeRead);
    ss.Empty();
    while ( fin.ReadString(str) != NULL ) {
      ss = ss+str+_T("\r\n");
    }
}

で、strが正しく取得できません。

CString ss;
CFileDialog myDLG(FALSE, _T("txt"), _T(".txt"), 
    OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("テキスト(*.txt)|*.txt|すべて(*.*)|*.*||"), NULL );
if ( myDLG.DoModal() == IDOK ) {

    CStdioFile fout(myDLG.GetPathName(), CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
    UpdateData(TRUE);
    fout.WriteString(ss);
    fout.WriteString(_T("\x1a"));
  }

で、CString ss をHDDに書き込み、メモ帳で開いた時は、正しく表示されています。

ファイルダイアログの問題ではなく、fin の問題かもしれませんが、よろしくお願いします。


ユニコードも初心者  2008-05-31 17:01:19  No: 68445

失礼しました。

最初のコードは、

CString ss, str;
CFileDialog myDLG(TRUE, _T("txt"), _T(".txt"), 
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("テキスト(*.txt)|*.txt|すべて(*.*)|*.*||"), NULL );
if ( myDLG.DoModal() == IDOK ) {
CStdioFile fin(myDLG.GetPathName(), CFile::modeRead);
ss.Empty();
while ( fin.ReadString(str) != NULL ) {
ss = ss+str+_T("\r\n");
}

です。
最後の } が余分でした。


Blue  2008-05-31 19:49:30  No: 68446

ロケールを設定するとどうなりますか?
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=2363158&SiteID=7


ユニコードも初心者  2008-06-01 13:05:20  No: 68447

ありがとうございました。

解決しました。


ユニコードも初心者  2008-06-01 13:06:01  No: 68448

解決しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加