ファイルのパスにコロンが使える
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; }