- ベストアンサー
iniファイル内の行を削除する方法
iniファイルの使い方自体を間違えているのかも知れませんが、 わからないので教えてください。 VB6でiniファイルを作成しています。 使用しているAPIは「WritePrivateProfileString」です。 iniファイルの内容が以下のようにあったとします。 これは上記のAPIで出力しています。 [a] a1=xxxx a2=yyyy a3=zzzz プログラムでiniファイルを読み込み、 画面上である操作をしたとして、iniファイルを更新します。 結果、以下のような内容にするには、どのようにしたらよいのでしょうか。 [a] a1=xxxx a2=zzzz a1、a2を出力するところまではできるのですが、 a3の行を削除する方法がわかりません。 もしAPIでこの行を削除する方法がなければ、 iniファイルを削除して、再作成すればよいのだと思います。 その際には、iniファイルを削除するAPIがあるのでしょうか。 KillステートメントやOpenステートメントを使うのが一般的なのでしょうか。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpSectionName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long と宣言して、 lpString に NULL を渡すと、キーの削除になります。 NULL の渡し方は WritePrivateProfileString(ByVal SectionName, ByVal KeyName, ByVal 0&, ByVal FileName) のようにします。 同様に WritePrivateProfileString(ByVal SectionName, ByVal 0&, ByVal 0&, ByVal FileName) とすると、セクションの削除ができます。
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
削除するためのAPIは存在しません 変わりにセクションデータを書き込むAPIを使用します セクションデータを取得する GetPrivateProfileSectionでセクション内のキーとデータを取得します これで取得したデータか必要ない部分を文字列操作で削除して WrirePrivateProfileSectionで書き込みましょう たとえば dim ss as string ss = String( 256, " ") GetPrivateProfileSection "A", ss, 256, "sample.ini" ss = Left(ss, InStr( ss,"A3")-1) WritePrivateProfileSection "A", ss, "sample.ini" といった具合です
お礼
行区切りにはChr(0)を使用してうまくいけたような気がするので、 これでセッション毎の出力をするようにしました。 ありがとうございました。
補足
ご回答いただき、ありがとうございます。 セクション全体を読み書きできるんですね。 教えていただきましたコードでうまくできそうです。 [a]は簡単なセクション例だったのですが、 他の キー=データ を追加する場合は、 行(キーごと)の区切りに Chr(0) を使用すればよろしいのでしょうか。 取り込んだ文字列の区切り位置を Asc で確認するとそうだったのですが、 それよりも vbCrLf などの改行文字でした方がよいのでしょうか。
お礼
ご回答いただき、ありがとうございます。 お教えいただきました方法でキーの削除、セクションの削除ができました。
補足
最初は行削除のつもりでしたが、 セクション毎の操作の方が都合がよいプログラムでしたので、 ANo.1のセクション毎の出力と合わせて、 セクション毎の削除を利用させていただきました。 ありがとうございました。