INIファイルを操作する簡単な方法

INIファイルは設定を記録するためのテキストファイルを指します。一般的に拡張子は「.INI」が用いられることが多いですが、それ以外の拡張子を使うケースもあります。基本的なフォーマット構造については理解されているものとして、ここでは取り扱いません。もし判らないときはWikipediaなどを参照してください。

INIファイルは直接ファイル内の文字列を操作しなくてもAPI関数を用いて直接操作することができます。 Windows95以降のオペレーティングシステムにおいてはレジストリを使用することが推奨されていますが、まだまだ多くのソフトでINIファイルが使われているのが現状です。ただし、マルチユーザ対応のソフトウェアを作る場合は素直にレジストリに書いたほうが簡単です。

INIファイルの保存先パスを作成する

一般的にexeファイルと同じフォルダにiniファイルを作成します。しかしながらWindowsのAPIはフルパスで呼び出す必要があるため、自分のフォルダを示すフルパスを事前に作成する処理が必要になります。以下にファイル名の作成を行う関数とINIファイルの操作方法を紹介する。

// INIファイルの保存先を作成する
//
// [引数]
// ini_fname : ファイル名
// ini_fullpath : 実行ファイルの存在する場所にINIを設定したフルパス
//
// [返値]
// 成功時 : true
// 失敗時 : false

bool MakeIniFileName(char *ini_fname, char *ini_fullpath)
{
    char module[_MAX_PATH + 1]; 
    char drive[_MAX_DRIVE]; 
    char dir[_MAX_DIR]; 
    bool bRet = false;

    // EXE名込みでフルパスを取得
    if (GetModuleFileName(NULL, module, sizeof(module)) != 0){
        _splitpath(module, drive, dir, NULL, NULL);

        // ファイル名を作成
        wsprintf(ini_fullpath, "%s%s%s", drive, dir, ini_fname); 
        bRet = true;
    }

    return bRet;
}
char szBuffer[256];
int value;

char ini_fname[256];
if (MakeIniFileName("test.ini", ini_fname)) {

    // 文字列を登録する
    WritePrivateProfileString( "section", "comment", "あいうえお", ini_fname);
    WritePrivateProfileString( "section", "data", "120", ini_fname);

    // 文字列として取得する
    GetPrivateProfileString("section", "comment", "unknown",
                            szBuffer, sizeof(szBuffer), ini_fname);

    // 数値として取得する
    value = GetPrivateProfileInt("section", "data", -1, ini_fname);
}

 

Windows API

Posted by @erestage