teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

指摘反映

2019/09/24 08:18

投稿

退会済みユーザー
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

コードを追加しました。

2019/09/24 08:17

投稿

退会済みユーザー
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型で格納されています。