INIファイルを使った情報の保存


INIファイルへ情報を保存する

INIファイルを使うことで、アプリケーションの様々な情報を保存しておくことができる。
以下の方法では、Windowsディレクトリ下の「プロジェクト名.INI」ファイルに情報を保存する。
	m_iData1 = 20;
	m_sString1 = "mojiretsu";
	……
	// INIファイルに情報を保存する
	CWinApp* pApp = AfxGetApp();
	pApp->WriteProfileInt("ProgramData", "IntData1", m_iData1);
	pApp->WriteProfileString("ProgramData", "String1", m_sString1);
上記のようにした場合、INIファイルの内容は以下のようになる。
[ProgramData]
IntData=20
String1=mojiretsu
もちろん、保存した情報を取り出すこともできる。方法は以下のとおり。
	// INIファイルから情報を取り込む
	CWinApp* pApp = AfxGetApp();
	m_iData = pApp->GetProfileInt("ProgramData", "IntData1", 0);
	m_sString1 = pApp->GetProfileString("ProgramData", "String1", NULL);
この場合、GetProfileInt及びGetProfileStringの3番目の引数には、 情報の読み込みに失敗した場合のデフォルト値として与えられる値を指定することができる。

目次へ



INIファイルのパス名を変更する

通常、INIファイルはWindowsディレクトリ下に作成されるが、これを任意のパス名に変更するには、 CWinAppクラスの派生クラスのInitInstance関数内で以下の方法で行う。
	BOOL CMyApp::InitInstance()
	{
		AfxEnableControlContainer();

		// 標準的な初期化処理
		// もしこれらの機能を使用せず、実行ファイルのサイズを小さくしたけ
		//  れば以下の特定の初期化ルーチンの中から不必要なものを削除して
		//  ください。

	#ifdef _AFXDLL
		Enable3dControls();	// 共有 DLL 内で MFC を使う場合はここをコールしてください。
	#else
		Enable3dControlsStatic();	// MFC と静的にリンクする場合はここをコールしてください。
	#endif

		// INIファイルのパス名を変更する
		if( m_pszProfileName ) {
			delete ((void*)m_pszProfileName);
			m_pszProfileName = new char[MAX_PATH];
			if( !m_pszProfileName ) {
				AfxMessageBox("メモリ不足エラーです。");
				return FALSE;
			}
			::GetCurrentDirectory(MAX_PATH, (LPTSTR)m_pszProfileName);
			strcat((LPTSTR)m_pszProfileName, "\\UKLITTLECLOCK.INI");
		}

		……
	}
CWinAppクラスのm_pszProfileNameメンバ変数には、INIファイルへのパス名が設定されている。 要するにこれを変更してやればよいのだが、単純に値を代入するのではなく、上記のように一旦メモリを解放し、 ヒープ上にメモリを確保してそこへ値を代入しなければならない。
当然、最後にはメモリ領域を解放する必要がある。これはExitInstance関数で行うとよい。
	int CMyApp::ExitInstance() 
	{
		// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
		if( m_pszProfileName ) {
			delete ((void*)m_pszProfileName);
			m_pszProfileName = NULL;  // これを忘れずに!!
		}
	
		return CWinApp::ExitInstance();
	}

目次へ



レジストリに情報を保存する

CWinAppクラスの派生クラスのInitInstance関数で以下の処理を行うと、 INIファイルの代わりにレジストリへ情報を保存することができるようになる。
	SetRegistryKey("My Software\\Applications");
この場合、レジストリの次の位置へ情報が格納される。
HKEY_CURRENT_USER\Software\My Software\Applications

実際に情報を格納したり取り出したりする方法は、INIファイルの場合と全く同じである。
詳細については、上記のINIファイルの項を参照のこと。

目次へ