お世話になります。
VS2005 MFCにてダイアログベースの
アプリを作成しています。
フォルダ名称をINIファイルに覚えさせておきたいのですが
サンプルを参考にしたのですがINIファイルの作成ができません。
何方かお教え頂けないでしょうか。
サンプルコード抜粋
InitInstance()内で以下のコードを定義しています。
//SetRegistryKey(_T("アプリケーション ウィザードで生成されたローカル アプリケーション"));
// iniファイル設定(EXEがあるフォルダの、EXEファイル名の拡張子がiniなものになるように)
if( m_pszProfileName ){
free((void*)m_pszProfileName);
}
TCHAR szModulePathName[MAX_PATH];
::GetModuleFileName( AfxGetInstanceHandle(), szModulePathName, MAX_PATH ); // DLLでも使えるようにAfxGetInstanceHandle()を使っている。
TCHAR szIniPathName[_MAX_PATH];
TCHAR drive[_MAX_DRIVE];
TCHAR dir[_MAX_DIR];
TCHAR fname[_MAX_FNAME];
TCHAR ext[_MAX_EXT];
_tsplitpath_s( szModulePathName, drive, _MAX_DRIVE, dir, _MAX_DIR, fname, _MAX_FNAME, ext, _MAX_EXT );
::SetCurrentDirectory(dir); // カレントディレクトリ変更
_tmakepath_s( szIniPathName, _MAX_PATH, drive, dir, fname, _T("ini") );
m_pszProfileName = _tcsdup( szIniPathName );
if( !m_pszProfileName ){
AfxMessageBox( _T("メモリ不足エラー") );
return FALSE;
}
OnInitDialog()で以下のコードを呼んでいます。
void CImageViewToolDlg::UpdateSettings(const BOOL bSave)
{
CWinApp* pApp = AfxGetApp();
ASSERT( pApp );
TCHAR szSection[256];
wsprintf( szSection, _T("Settings") );
// CString型の変数
if( bSave ){
pApp->WriteProfileString( szSection, _T("InputFolderPath"), m_strInputFolder );
}
else{
m_strInputFolder = pApp->GetProfileString( szSection, _T("InputFolderPath"), m_strInputFolder );
}
WriteProfileString
Win.ini ファイルの指定されたセクションに、文字列を書き込みます。
WritePrivateProfileString
こっちじゃないですか?
既に指摘されている通り、Write「Private」Profile〜/Get「Private」Profile〜
かと。
あと…
>_tsplitpath_s( szModulePathName, drive, _MAX_DRIVE, dir, _MAX_DIR, fname, _MAX_FNAME, ext, _MAX_EXT );
>::SetCurrentDirectory(dir); // カレントディレクトリ変更
のカレントディレクトリ移動は失敗するかも知れません。
# コールした時点ではdirにドライブ名が入っていません。
ついでに言うと、アプリのデータファイルなどはGetModuleFileName()で取得したパス名から、絶対パスでアクセスするようにした方が良いでしょう。
相対パス記述だといつカレントパスが変更されるか判りませんし。
# GetOpenFileName()とかコールしたら変わってしまった…とか。
既に指摘されている通り、Write「Private」Profile〜/Get「Private」Profile〜
かと。
あと…
>_tsplitpath_s( szModulePathName, drive, _MAX_DRIVE, dir, _MAX_DIR, fname, _MAX_FNAME, ext, _MAX_EXT );
>::SetCurrentDirectory(dir); // カレントディレクトリ変更
のカレントディレクトリ移動は失敗するかも知れません。
# コールした時点ではdirにドライブ名が入っていません。
ついでに言うと、アプリのデータファイルなどはGetModuleFileName()で取得したパス名から、絶対パスでアクセスするようにした方が良いでしょう。
相対パス記述だといつカレントパスが変更されるか判りませんし。
# GetOpenFileName()とかコールしたら変わってしまった…とか。
サーバエラーでリトライしたら二重投稿に(TT
お世話になります。
WritePrivateProfileStringを使用することで解決致しました。
有難う御座いました。
ツイート | ![]() |