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 の問題かもしれませんが、よろしくお願いします。
失礼しました。
最初のコードは、
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");
}
です。
最後の } が余分でした。
ロケールを設定するとどうなりますか?
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=2363158&SiteID=7
ありがとうございました。
解決しました。
解決しました。
ツイート | ![]() |