• ベストアンサー

INIファイルに一括書き込みを行う方法を教えて下さい。

Visual Basic6.0において INIファイルに一括書き込みを行う方法はないでしょうか。 「KEY_1」~「KEY_1000」に"-1"を書き込みたいのですが、 現状、 WritePrivateProfileString() を使用して、「KEY_〇」を1000回ループして書き込む方法しかわかりません。 「KEY_1」~「KEY_1000」に一括で"-1"を書き込む方がパフォーマンスの向上につながると思うのですが、何か名案はないでしょうか。 ご存知の方、教えて下さい。お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

WinAPIのWriteProfileSectionを使えばいいのでは ・・・ Private Declare Function WritePrivateProfileSection _   Lib "kernel32" Alias "WritePrivateProfileSectionA" _   (ByVal lpAppName As String, ByVal lpString As String, _   ByVal lpFileName As String) As Long といった具合でAPI宣言する 標準モジュールに宣言するなら Public Declareで宣言する dim s1(1 to 1000) as String, ss as String dim n as Integer for n = 1 to 1000   s1(n) = "Key_" & n & "=-1" next ss = Join( s1, Chr(0) ) WritePrivateProfileSection "Sample", ss, ".\myFile.ini" セクション内が 書き換えたいものだけなら上記でいいがほかのデータもあるのでしたら GetPrivateProfileSectionで元の内容を取得してから変更部分を書き換えて出力するようにしましょう Private Declare Function GetPrivateProfileSection _   Lib "kernel32" Alias "GetPrivateProfileSectionA" _   (ByVal lpAppName As String, ByVal lpReturnedString As String, _   ByVal nSize As Long, ByVal lpFileName As String) As Long といった具合なので dim ss as String ss = String( 4096, " " ) GetPrivateProfileSection "Sample", ss, Len(ss), ".\myFile.ini" といった具合にして 読み込む変数にあらかじめダミーのデータを設定してから呼び出しましょう

nori79
質問者

お礼

早速の回答、及び親切な説明をありがとうございます。 教えていただいた方法で試してみます。 WritePrivateProfileString()を1000回コールする方法では下記(1)~(3)を1000回実行することとなり、(1)と(3)の繰り返しが無駄と思いました。 (1).INIファイルオープン (2).「KEY_〇」書き込み (3).INIファイルクローズ(セーブ) WriteProfileSection()を使用することにより、 (1).INIファイルオープン (2).「KEY_1~KEY_1000」書き込み (3).INIファイルクローズ(セーブ) (1)~(3)を1回だけ実行していることとなり、処理時間の短縮に繋がるのではと思っています。

関連するQ&A

  • 独自INIファイルの操作をしたいんですが

    phpでaaa.iniの操作をしたいのですが 例えば [section] key1=aaaaa の「aaaaa」を書き換えたいのです。 (力量不足もありますが) 項目が複数あるので単純なfwriteでは対応できそうになく 出来れば win32apiのWritePrivateProfileStringのような 動かし方が出来ればいいのですが 読み込みは parse_ini_fileで出来そうなのですが 更新の方は方法が見つからなくて よろしくお願いします。

    • ベストアンサー
    • PHP
  • eMbedded Visual C++で、.iniファイルは使えるのでしょうか?

    eMbedded Visual C++で、PDA上で動作するアプリを 開発しているのですが、.iniファイルは 使えるのでしょうか? WritePrivateProfileStringを使用しようとしたら "undeclared identifier" という、リンクエラーが出てしまいました。 なにか特別なヘッダファイルかライブラリをリンクする 必要があるのでしょうか?

  • xxx.iniファイルのデータ消去について

    よろしくお願いいたします。 アプリ終了時にWritePrivateProfileString(aaa,"X",szBuffer,"d:\\kado.ini");を使ってデータを書きこんでいます。 書きこむデータ数が一定ではないため、書きこむ前にデータを一旦消去したいのですが、そのような関数はあるのでしょうか? ご存知でしたらお教えください。 # 今は通常のファイルオープン if((fout=fopen("d:\\kado.ini","w"))==NULL) ・・・ で処理をしているのですが、WritePrivateProfileStringでの書きこみが出来るときと出来ないときが繰り返しで発生する不具合が生じています。

  • C#でiniファイルの書き込みがうまくいきません。

    C#初心者です。今回INIファイルを生成→書き込みを行うためのソースコードを書いたのですが、空ファイルの生成はうまくいくのにINIファイルへの書き込みがうまくいかず、空ファイルのままになってしまいます。なぜでしょうか? 以下ソースコード using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Runtime.InteropServices; namespace Loei_Server_ { /* ネットで公開されていたINIファイルに関するクラス。 難しいことは考えちゃアカン。 */ class IniFileHandler { [DllImport("KERNEL32.DLL")] public static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, uint nSize, string lpFileName); [DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileStringA")] public static extern uint GetPrivateProfileStringByByteArray(string lpAppName, string lpKeyName, string lpDefault, byte[] lpReturnedString, uint nSize, string lpFileName); [DllImport("KERNEL32.DLL")] public static extern uint GetPrivateProfileInt(string lpAppName, string lpKeyName, int nDefault, string lpFileName); [DllImport("KERNEL32.DLL")] public static extern uint WritePrivateProfileString( string lpAppName, string lpKeyName, string lpString, string lpFileName); } class Program { static void Main(string[] args) { /* 日付を取得。 */ DateTime this_time = DateTime.Now; /* 多重起動するとマズイので多重起動していたら強制的に終了する。*/ if (System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length > 1) { Console.WriteLine(" [Error] " + "[" + this_time.ToString() + "] Application already has started. This program is on the nature, you can not multi-boot."); return; } /* コンフィグデータの確認。なかったら勝手に生成する。 */ if (!File.Exists("Config.ini")) { Console.WriteLine(" [Warning] " + "[" + this_time.ToString() + "] Config.ini file could not be found. I created you."); /* 空のINIファイルを生成。 */ StreamWriter writer = new StreamWriter("Config.ini", true); /* 生成したINIファイルにいろいろ書き込む。 */ IniFileHandler.WritePrivateProfileString("Loei_Server_", "TCP_IP", "localhost", "Config.ini"); IniFileHandler.WritePrivateProfileString("Loei_Server_", "TCP_HOST", "25565", "Config.ini"); Console.WriteLine(" [Info] " + "[" + this_time.ToString() + "] It has generated an Config.ini file!"); }

  • 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ステートメントを使うのが一般的なのでしょうか。 よろしくお願いいたします。

  • VC++でのiniファイルの読み書き

    今Visual Studio 6.0 Professional Editionを使用して開発を行っています。 そこでiniファイルの読み書きを行う必要があるのですが、ほんとに初心者でどのようにすればいいのかわかりません。 そこで皆さんの知恵をお借りしたいのですが、 サンプルプログラムや役に立つサイトなどを教えていただきたいのです。 やることとしてはiniファイルからデータを読む。 プログラム中のデータをiniファイルの特定のセクションのキーに書き込むです。 よろしくお願いします。

  • iniファイルのセクションについて

    おはようございます。matsuhiraです。 今回の質問はiniファイルについてです。 iniファイルのセクションだけを取得する方法はありますか? 知っている方協力をお願いします。

  • 複数のWordファイルの一括印刷方法

    Word(Microsoft365)で作成した複数のファイルを、一括で印刷要求する方法を教えて下さい。ファイル一覧画面でShiftキーで範囲指定したり、Ctrlキーでファイル指定すると、一括印刷はできますが、印刷されるファイルの順序がバラバラで困ります。こちらの指定した順序で複数ファイルを一括印刷要求する方法を教えて下さい。印刷したいファイルは、同じフォルダー内にある20ファイル位です。今は、ファイル選択・右クリック・Pボタン で一つずつ印刷しています。詳しい方、よろしくお願い致します。

  • INIファイルの読み書きをするには?

    お世話になります。WindowsXP/Cで開発している初心者です。 開発はwindowsでしておりますが、最終的にはlinuxで動作させます。 質問させていただきたい件ですが INIファイルの読み込み、書き込みをするには、どういった方法(関数?)がありますでしょうか。 ネットで調べておりますが、見つけられずにいます。 windows.hをインクルードし、おなじみのGetPrivateProfileStringを実行すると windows上ではコンパイルが通りますが、linuxではヘッダーファイルが存在しないと エラーが出ます。(当たり前だと思いますが) ご存知の方、いらっしゃいましたら、ご指導願います。 宜しくお願い致します。

  • iniファイルのキーと値を取得するにはどうすれば?

    こんばんわ、マッイィーです。 毎度のことながらお助けを。 iniファイルのキーと値をとるために必要な関数は 何か教えてください。 その取得したキーと値を配列に格納したいのですが、 いい方法ありませんか? 分かっちゃった!って人、おもいっきり教えてください。 もんどりもっさりに教えてください。

専門家に質問してみよう