マインスイーパーのハイスコアを記録させたいと思い、CString型を含むデータをファイルに書き込みたいと思っています。
データは以下のようなものです。
[hr]初級
プレイ回数0 クリア回数0 クリア率0% 連勝数0 連敗数0 現在0
1. 999 名無し 0000/00/00 00:00:00
2. 999 名無し 0000/00/00 00:00:00
3. 999 名無し 0000/00/00 00:00:00
4. 999 名無し 0000/00/00 00:00:00
5. 999 名無し 0000/00/00 00:00:00
6. 999 名無し 0000/00/00 00:00:00
7. 999 名無し 0000/00/00 00:00:00
8. 999 名無し 0000/00/00 00:00:00
9. 999 名無し 0000/00/00 00:00:00
10. 999 名無し 0000/00/00 00:00:00
中級
―以下略―
[hr]
見てわかるとおり、全角と半角が混ざっています。
スペースはすべて全角です。
それが原因なのか、書き込みがうまくいきません。
CStdioFile fout(L"time.score",CFile::modeCreate | CFile::modeWrite );
for(int n=0;n<3;n++){
fout.WriteString((CString)grade[n]+L"\n"); //char grade[3][5]
fout.WriteString((CString)numbers[n]+L"\n"); //char numbers[3][100]
for(int m=0;m<10;m++){
fout.WriteString(recordsc[n][m]+L"\n"); //CString recordsc[3][11]
}
}
fout.Close();
[hr]1.2.3.4.5.6.7.8.9.10.1.2.3.4.5.6.7.8.9.10.1.2.3.4.5.6.7.8.9.10.
[hr]
となり、全角だけでなくそれ以降全てが無視され、改行もされません。
CStdioFile fout(L"time.score",CFile::modeCreate | CFile::modeWrite );
for(int n=0;n<3;n++){
str=L"";
str=(CString)grade[n]+L"\n";
fout.Write(str.GetBuffer(),str.GetLength());
str=L"";
str=(CString)numbers[n]+L"\n";
fout.Write(str.GetBuffer(),str.GetLength());
for(int m=0;m<10;m++){
str=L"";
str=recordsc[n][m]+L"\n";
fout.Write(str.GetBuffer(),str.GetLength());
}
}
fout.Close();
[hr]Rラ0・0゙Vpe1 00・0゙Vpe0 00・0s1 . 09 9 9 0
T!qW0 00 0 0 0 /2 . 09 9 9 0
T!qW0 00 0 0 0 /3 . 09 9 9 0
T!qW0 00 0 0 0 /4 . 09 9 9 0
T!qW0 00 0 0 0 /5 . 09 9 9 0
T!qW0 00 0 0 0 /6 . 09 9 9 0
T!qW0 00 0 0 0 /7 . 09 9 9 0
T!qW0 00 0 0 0 /8 . 09 9 9 0
T!qW0 00 0 0 0 /9 . 09 9 9 0
T!qW0 00 0 0 0 /1 0 . 09 9 9 0
T!qW0 00 0 0 0 -Nラ0・0゙Vpe0 00・0゙Vpe0 00・01 . 09 9 9 0
T!qW0 00 0 0 0 /2 . 09 9 9 0
T!qW0 00 0 0 0 /3 . 09 9 9 0
T!qW0 00 0 0 0 /4 . 09 9 9 0
T!qW0 00 0 0 0 /5 . 09 9 9 0
T!qW0 00 0 0 0 /6 . 09 9 9 0
T!qW0 00 0 0 0 /7 . 09 9 9 0
T!qW0 00 0 0 0 /8 . 09 9 9 0
T!qW0 00 0 0 0 /9 . 09 9 9 0
T!qW0 00 0 0 0 /1 0 . 09 9 9 0
T!qW0 00 0 0 0
Nラ0・0゙Vpe0 00・0゙Vpe0 00・01 . 09 9 9 0
T!qW0 00 0 0 0 /2 . 09 9 9 0
T!qW0 00 0 0 0 /3 . 09 9 9 0
T!qW0 00 0 0 0 /4 . 09 9 9 0
T!qW0 00 0 0 0 /5 . 09 9 9 0
T!qW0 00 0 0 0 /6 . 09 9 9 0
T!qW0 00 0 0 0 /7 . 09 9 9 0
T!qW0 00 0 0 0 /8 . 09 9 9 0
T!qW0 00 0 0 0 /9 . 09 9 9 0
T!qW0 00 0 0 0 /1 0 . 09 9 9 0
T!qW0 00 0 0 0
[hr]
となり、文字化けでうまくいきません。
改行位置も思っていたものと違いますし・・・
どのように書けばCString型などの全角を含む文字列を正しい改行で書き込むことができるでしょうか?
プログラミングにおいて全角と半角が混じっていたら文字化けを起こす可能性があるのは知っていますが、この場合もあきらめないといけないでしょうか?