質問編集履歴
2
指摘反映
title
CHANGED
File without changes
|
body
CHANGED
@@ -20,6 +20,8 @@
|
|
20
20
|
■まとめ
|
21
21
|
上記のような差が出る原因がわかりません。私の想いとしては、「iniファイルがUTF16-LE(BOM付き)の場合」であっても、改行コードが入らない状態にすることです。
|
22
22
|
|
23
|
+
■iniファイルにCRLFが入るのが嫌な理由
|
24
|
+
iniファイル作成後、ツールを再起動した際、iniファイルの1行目から読み込み処理を行っていきます。そちらの処理では、1行目に" [ "が存在することが前提として起動する処理であるため、今回の修正で、iniファイルの1行目にFF FE 0D 00 0A 00、つまり" [ "が存在しないのは都合が悪いです。
|
23
25
|
■コード
|
24
26
|
|
25
27
|
①呼び出し側(Dlg.cpp)
|
1
コードを追加しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -18,4 +18,27 @@
|
|
18
18
|
WritePrivateProfileStringを実施する直前にiniファイルをバイナリで確認したところ、FF FEのBOMを意味する文字コードしか入っていないことを確認済みです。また、WritePrivateProfileString実施直後にiniファイルをバイナリで確認した時に、0D 00 0A 00(改行CRLFを意味する)が入っています。
|
19
19
|
|
20
20
|
■まとめ
|
21
|
-
上記のような差が出る原因がわかりません。私の想いとしては、「iniファイルがUTF16-LE(BOM付き)の場合」であっても、改行コードが入らない状態にすることです。
|
21
|
+
上記のような差が出る原因がわかりません。私の想いとしては、「iniファイルがUTF16-LE(BOM付き)の場合」であっても、改行コードが入らない状態にすることです。
|
22
|
+
|
23
|
+
■コード
|
24
|
+
|
25
|
+
①呼び出し側(Dlg.cpp)
|
26
|
+
ma.CreateIni(b.m_DevName, b.m_SvName, b.m_RcvFolder, b.m_CopyPath, b.m_Port);
|
27
|
+
|
28
|
+
②上記①に呼ばれる側(A.cpp)
|
29
|
+
int A::CreateIni(CString DevName, CString SvName, CString RcvName, CString IniPath, CString Port)
|
30
|
+
{
|
31
|
+
if(::WritePrivateProfileString((LPCTSTR)strName, SERVERNAME, (LPCTSTR)SvName, IniPath) == 0)
|
32
|
+
return -1;
|
33
|
+
}
|
34
|
+
|
35
|
+
③バイナリの書き込み
|
36
|
+
if (file.Open(strIniPath, CFile::modeWrite | CFile::modeCreate | CFile::shareExclusive)) {
|
37
|
+
BYTE bom[2] = {0xff, 0xfe};
|
38
|
+
file.Write(bom, 2);
|
39
|
+
file.Close();
|
40
|
+
}
|
41
|
+
|
42
|
+
※注
|
43
|
+
maは「Aクラスのインスタンス」です。
|
44
|
+
b.xxxは「Bクラスのメンバ変数」で、ダイアログでユーザが入力した値がCString型で格納されています。
|