- ベストアンサー
ファイルのパスを動的に取得
現在Visual Studio 6.0 Professional Editionを使って開発をしています。 その中でiniファイルを使う部分があるのですが、 現在はiniファイルまでのフルパスを直書きしています。 しかし、そのパスを動的に取得したいのです。 イメージ↓ フォルダA | Liniファイル ←☆の位置からこのパスを取得したい | フォルダB LEXE☆ ←ここから まだまだ技術的な力が足りず、どうしたらいいのかさっぱりわかりません。 そこで皆さんの知恵を借りたいのです。 よろしくお願いします。 サンプルでもサイトでもなんでも構いません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
考え方なので、理解してデバッグして下さい。 EXEのあるフォルダの隣にあるフォルダAにINIファイルがあるという前提です。 #include <windows.h> #include <stdlib.h> char szBuf[_MAX_PATH]; char szDrive[_MAX_DRIVE]; char szDir[_MAX_PATH]; GetModuleFileName( NULL, szBuf, _MAX_PATH ); _splitpath( szBuf, szDrive, szDir, NULL, NULL ); sprintf( szBuf, "%s%s%s", szDrive, szDir, "..\\フォルダA\\iniファイル名"); szBufに絶対パスが入る。 sprintf( szBuf, "%s%s%s", szDrive, szDir, "\\..\\フォルダA\\iniファイル名"); かもしれません。szBufを表示して確認要! GetModuleFileName()は、実行ファイルのフルパス名とファイル名を取得します。
その他の回答 (4)
- Wr5
- ベストアンサー率53% (2173/4061)
相対パスでの指定の際には… 「カレントディレクトリ」に注意してください。 exeファイルのある場所がカレントディレクトリとは限りませんので。 #2さんの書かれているGetModuleFileName()を使用しての絶対パスでの指定がベストだと思います。
- don_go
- ベストアンサー率31% (336/1059)
環境変数にiniファイルの位置を記述しておくのは? 環境変数 INIDIR=C:\フォルダA #include <stdlib.h> char *env; env = getenv("INIDIR");
- Oh-Orange
- ベストアンサー率63% (854/1345)
★相対パスでの指定ではダメなの? ・フルパス名が長いのなら相対パスで指定すればよいのでは。 イメージが良く読み取れませんが ◆フォルダA ├─iniファイル └フォルダB └exeファイル ↑ ならば『..\\filename.ini』とすればいい。 ・もし下のイメージなら ◆フォルダA │ └iniファイル └フォルダB └exeファイル ↑ ならば『..\\フォルダA\\filename.ini』となります。 ・相対パスでも処理できると思いますのでフルパスに直さず試して見て下さい。 ・以上。
- cdsdasds
- ベストアンサー率52% (114/217)
一般にWindowsOSにファイルのパスを自動で取得する方法はありません。 iniファイルを必ず、アプリの起動ディレクトリあるいは、パスの通った場所に置くことにするか、インストーラで置いてあるフォルダをレジストリに書き込むようにするといいでしょう。 最もレジストリ構うなら、最初からiniファイルでなくレジストリでよいのではという話もあるでしょうが。