カレントディレクトリの取得 – プログラミング – Home

カレントディレクトリの取得
 
通知
すべてクリア

[解決済] カレントディレクトリの取得


てんてく
 てんてく
(@てんてく)
ゲスト
結合: 20年前
投稿: 92
Topic starter  

普通はGetCurrentDirectory()関数を使用すると取れるのですが
FileDialogでカレントと異なる任意ファイルを選んだ後使用すると
正しいパスが取れないのですが
いつでも正しいパスが取れる方法ってありますか?

VS2008 MFC
#include afxdlgs.h
void CTestDlg::OnBnClickedButton1()
{
CFile f;
if(f.Open(_T(Test.txt), CFile::modeRead))
{
TRACE(true\n);
}
else
{
TRACE(false\n);//ファイルダイアログ実行後だと失敗
}
}

void CTestDlg::OnBnClickedButton2()
{
CFileDialog dlg(true);
dlg.DoModal();
}


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 4年前
投稿: 828
 

GetCurrentDirectory()が戻すパスは、SetCurrentDirectory()で
任意に変更できます(されます)。
どのような意味の「正しいパス」を希望していますか(質問)。

 例) 1.実行ファイルの物理パス
   2.システムのパス
   3.その他
   


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

カレントディレクトリは、
「現在(直近)の作業パス」のこと


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 18年前
投稿: 381
 

既定の動作ではファイルダイアログが
勝手にカレントディレクトリーを変更してしまうので、
CFileDialogのコンストラクターから
OFN_NOCHANGEDIRフラグを追加してやるのが簡単です。


返信引用
ツてゑソス艪ュ
 ツてゑソス艪ュ
(@ツてゑソス艪ュ)
ゲスト
結合: 12年前
投稿: 1
 

回答ありがとうございます。関連のSet…は見ましたがこれが勝手に呼ばれいていて
EXEが実行されているパスかと思っていましたものが変わってしまうようですね。
OFN_NOCHANGEDIRを入れることにします。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2659
 

解決になっていますが、

実行ファイル(xxx.exe)があるファイルがカレントディレクトリと言うわけではないので
注意して下さい。
カレントディレクトリは実行時にクリックしたショートカットの設定等によっても
変わりますから、自分が欲しいディレクトリがカレントディレクトリで本当に正しいのか
を良く考えて設計される事をお勧めします。
基本的にカレントディレクトリは当てにならない事が多いので使わない事が多いです。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2659
 

間違いがあったので。

誤)
実行ファイル(xxx.exe)があるファイルがカレントディレクトリと言うわけではないので

正)
実行ファイル(xxx.exe)があるフォルダがカレントディレクトリと言うわけではないので

文脈からわかるかと思いますが、念のため。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

PATIOさんも書かれていますが…
私もカレントディレクトリはあてにならないので、GetModuleFileName()で実行ファイル
のファイル名を取得して、パス名分解していますね。

実行ファイルのある場所からの相対パスでアクセスする場合もGetModuleFileName()で実
行ファイル名を取得してから絶対パス名にしてアクセスしています。
# ネットワーク共有の場合を考慮する必要がある…かも知れませんが。

本題とは関係ありませんが…Cookieの問題なのか「お名前」が化けることがありますねぇ……。


返信引用
tenteku
 tenteku
(@tenteku)
ゲスト
結合: 14年前
投稿: 38
 

カレントはあくまで可変の作業用ディレクトリのデフォルト値として覚えておくことにし
ます。
GetModuleFileName便利そうですね、アプリケーションで相対パス見るときも
モジュール位置からの相対にしてくれればいいのに。

名前は化けないであろうものに変える事にします。。。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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