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

解決


ユニコードも初心者  2008-05-31 07:59:43  No: 68444  IP: 192.*.*.*

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 08:01:19  No: 68445  IP: 192.*.*.*

失礼しました。

最初のコードは、

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 10:49:30  No: 68446  IP: 192.*.*.*

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

編集 削除
ユニコードも初心者  2008-06-01 04:05:20  No: 68447  IP: 192.*.*.*

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

解決しました。

編集 削除
ユニコードも初心者  2008-06-01 04:06:01  No: 68448  IP: 192.*.*.*

解決しました。

編集 削除