カンパ〜イ!←最初の1杯目、なに頼む?

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ステートメントを使うのが一般的なのでしょうか。

よろしくお願いいたします。

A 回答 (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)
とすると、セクションの削除ができます。

この回答への補足

最初は行削除のつもりでしたが、
セクション毎の操作の方が都合がよいプログラムでしたので、
ANo.1のセクション毎の出力と合わせて、
セクション毎の削除を利用させていただきました。

ありがとうございました。

補足日時:2008/03/14 09:52
    • good
    • 0
この回答へのお礼

ご回答いただき、ありがとうございます。

お教えいただきました方法でキーの削除、セクションの削除ができました。

お礼日時:2008/03/10 09:49

削除するための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"
といった具合です

この回答への補足

ご回答いただき、ありがとうございます。

セクション全体を読み書きできるんですね。
教えていただきましたコードでうまくできそうです。

[a]は簡単なセクション例だったのですが、
他の キー=データ を追加する場合は、
行(キーごと)の区切りに Chr(0) を使用すればよろしいのでしょうか。
取り込んだ文字列の区切り位置を Asc で確認するとそうだったのですが、
それよりも vbCrLf などの改行文字でした方がよいのでしょうか。

補足日時:2008/03/07 15:34
    • good
    • 0
この回答へのお礼

行区切りにはChr(0)を使用してうまくいけたような気がするので、
これでセッション毎の出力をするようにしました。

ありがとうございました。

お礼日時:2008/03/14 09:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報