ファイルのパスにコロンが使える

Orator's IOさんのBlogを見てふと思ったのですが、

CreateFileなどからAlternative Data Streamsが利用できるなら、iniファイル読み書きAPI

  • WritePrivateProfileString
  • GetPrivateProfileString
  • GetPrivateProfileInt

なども利用できるのではないかと思いテスト。
(あわよくば、exe自体をiniファイルとして扱うことによって、設定事項自己記述型?exeがつくれないかなと)

参考
プログラマから見た NTFS 2000 Part1: ストリームとハード リンク


結果

思ったとおり、exeのフルパス+":ストリーム名"で読み書きできました。

しかし、ビルドのたびに設定が消えてしまうので微妙です。
APIリファレンスにもストリーム使えることが書いてないですし)

#include <windows.h>

int main(int argc, char* argv[])
{
    char buf[MAX_PATH];
    char getbuf[255];
    // 自EXE名の取得
    GetModuleFileName( NULL, buf, MAX_PATH );
    //exeのパスにストリーム名を追加
    strcat( buf, ":IniData");

    // ストリームからデータが取得できるかチェック
    // 0 以外が取得できる場合は、既にデータが書き込まれている
    int data = GetPrivateProfileInt( "Section","IntData", 0, buf );
    if( data == 0 )
    {
        // 取得できない場合は書き込み
        WritePrivateProfileString("Section","StrData", "テスト書き込み", buf );
        WritePrivateProfileString("Section","IntData", "12345", buf );
    }

    // Alternative Data Streamsに保存したiniファイルのデータの読み込み
    data = GetPrivateProfileInt( "Section","IntData", 0, buf );
    GetPrivateProfileString( "Section","StrData","", getbuf, 255, buf );

    // 書き換え
    WritePrivateProfileString("Section","StrData", "書き換え", buf );
    GetPrivateProfileString( "Section","StrData","", getbuf, 255, buf );

    return 0;
}