指定したINIファイルからのデータ読み込み – プログラミング – Home

指定したINIファイルからのデータ読み...
 
通知
すべてクリア

[解決済] 指定したINIファイルからのデータ読み込み


入門者
 入門者
(@入門者)
ゲスト
結合: 15年前
投稿: 5
Topic starter  

昨日から、ソフトVC++を始めた初心者です。
会社にINIファイルを読み込める機能を追加しろと言われ調べながら
C:WINDOWSの中にあるINIファイルを読み込み表示できたのですが、
.exeと同じフォルダのINIファイルの表示がうまくできません。
お手数ですが、ご教示ください。

開発環境
VisualStudio2008、VC++、WindowsXP

=====================================
test1.cpp

BOOL CxxxApp::InitInstance()
{
AfxEnableControlContainer();

//INIファイル読み込み先のPATH設定の開始//

/*自プログラムのフルパス名を取得する*/
char exeFullPath[512];
::GetModuleFileName(NULL,exeFullPath,MAX_PATH);
char* pdest = strrchr(exeFullPath, 'g');
pdest[1] = '\0';

//文字列に変換
exepath.Format(%s,exeFullPath);

//領域の初期化
free((void*)m_pszProfileName);

//INIファイルのパスを設定
m_pszProfileName=_tcsdup(exepath);

int CEasyCommToolApp::ExitInstance()
{
return CWinApp::ExitInstance();
}
}
=====================================
test2.cpp

//INIファイル読み込みボタン
void Cyyy::OnButton_INI()
{
name = GetPrivateProfileInt( test, name, 999999, xxx.ini );

SetDlgItemInt(IDC_EDIT2,name);

}

=====================================


引用未解決
トピックタグ
入門者
 入門者
(@入門者)
ゲスト
結合: 15年前
投稿: 5
Topic starter  

char* pdest = strrchr(exeFullPath, 'g');

ではなく

char* pdest = strrchr(exeFullPath, '\\');
でした。
失礼しました。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467

返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

::GetModuleFileName(NULL,exeFullPath,MAX_PATH);
で取得したモジュールパスを分解して、iniファイルのフルパス名を作成して、
name = GetPrivateProfileInt( test, name, 999999, xxx.ini );
のファイル名に渡すだけ。
pszProfileNameを書き換える必要はない。


返信引用
入門者
 入門者
(@入門者)
ゲスト
結合: 15年前
投稿: 5
Topic starter  

Blue様、maru様
早速のご回答ありがとうございます。
URLと指摘された事項を参照し、試みてみます。


返信引用
入門者
 入門者
(@入門者)
ゲスト
結合: 15年前
投稿: 5
Topic starter  

たびたび失礼します。
ご指摘いただいた事を参考にtest1.cppを下記のように書き換え、
「カーソル行の前まで実行」でiniPathNameにカーソルを合わせると
iniファイルまでのパスがちゃんと表示されるのですが、うまくいきません。

あと、
name = GetPrivateProfileInt( test, name, 999999, xxx.ini );
のファイル名に渡すだけ。
との事ですが渡すとはどのようにすればよいのでしょうか?

お手数ですが、ご教示ください。

=====================================
test1.cpp
/*自プログラムのフルパス名を取得する*/
 TCHAR exeFullPath[512];
 ::GetModuleFileName(NULL,exeFullPath,MAX_PATH);
    //char* pdest = strrchr(exeFullPath, '\\');
    //pdest[1] = '\0';
 TCHAR iniPathName[_MAX_PATH];
 TCHAR drive[_MAX_DRIVE];
 TCHAR dir[_MAX_DIR];
 TCHAR fname[_MAX_FNAME];
 TCHAR ext[_MAX_EXT];
  _splitpath(exeFullPath,drive,dir,fname,ext);
  _tmakepath_s( iniPathName, _MAX_PATH, drive, dir, fname, _T(ini) );

//文字列に変換
//exepath.Format(%s,exeFullPath);

//領域の初期化
//free((void*)m_pszProfileName);

//INIファイルのパスを設定
//m_pszProfileName=_tcsdup(iniPathName);
=====================================
test2.cpp

//INIファイル読み込みボタン
void Ctest2::OnButton_INI()
{
name = GetPrivateProfileInt( test, name, 999999, xxx.ini );

SetDlgItemInt(IDC_EDIT2,name);

}

=====================================


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

とりあえず、
  「GetPrivateProfileIntのヘルプを見ましたか?」
ヘルプをみれば、
> との事ですが渡すとはどのようにすればよいのでしょうか?
こんな質問出てこないはずです。

ここにも「ググるな危険」があるような。


返信引用
入門者
 入門者
(@入門者)
ゲスト
結合: 15年前
投稿: 5
Topic starter  

maru様

自分なりにはGetPrivateProfileInt関数を調べて理解したつもりでしたが、
lpFileName には、iniファイル名を指定すると思っていたのですが、
指摘され再度隅々まで閲覧したところファイル名だけでなく、
作成したフルパスも指定できるのですね。
理解が浅かったです。。失礼しました。

name = GetPrivateProfileInt( test, name, 999999, xxx.ini );
のxxx.iniをiniPathName にしたところ、無事解決しました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました