牛、豚、鶏、どれか一つ食べられなくなるとしたら?

以下のようなプログラムを作っています。

実行内容としては、

MessageBoxでYesNo選択

Yesなら~~という処理、
Noなら、ファイルの選択画面を立ち上げて、ファイルを選択。ReStartという関数にそのファイル名を渡す

そのあと、現在時間を取得して、filename4というファイルに追加書き込みをする。

という処理です。
ここで、私はfilename4=./time/AAA.timeと指定しているのですが、
Yes処理のあとはうまくfileが開けて書き込めるのですが、No処理のあとはfileが開けないんです。
おそらくは、No処理の中のファイル選択で、VC++のプロジェクトがあるディレクトリと違うディレクトリから選択しているせいだと思うんですが、これを解消する方法はありますでしょうか??

VC++短いんで、もし単純でしたら申し訳ないですが、どうぞよろしくお願いします。

-------------------------------------------
・・・

if(MessageBox("はじめから?", "message", MB_YESNO)==IDYES){~~}
else{
CFileDialog fd(TRUE,"","",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_LONGNAMES,
"位置ファイル (*.POSI)|*.POSI|"
"全てのファイル(*.*)|*.*||",
NULL);
if(fd.DoModal()==IDOK){
posifilename = fd.GetPathName();
}

ReStart(posifilename);
}
stream4 = fopen(filename4,"a");
if(stream4 == NULL ){
MessageBox("Cannot Open the File!!", "error", MB_OK);
}
strwork4.Format("%ld,",time(NULL));
fprintf(stream4,strwork4);
fclose(stream4);

A 回答 (3件)

CFileDialogのコンストラクタの引数dwFlagにOFN_NOCHANGEDIRを追加する。


OFN_NOCHANGEDIRを追加するとファイル選択ダイアログでカレントフォルダが変更されなくなる。
    • good
    • 0

# フルパスで指定というのは何も決めうちにしろという意味ではないですよ。



char filename4[MAX_PATH];

GetModuleFileName(NULL, filename4, MAX_PATH);
PathRemoveFileSpec(filename4);
PathAppend(filename4, "time\aaa.time");
    • good
    • 0

# カレントディレクトリが変わってしまうのかな?



開くファイルをフルパスで指定すればいいと思いますよ。

実行ファイルのフルパスは GetModuleFileName で取れるので,
これを利用してもいいですし。

この回答への補足

他のPCに移して実行することもあるので、フルパス指定はしたくないんです。
で、GetModuleFileNameの使い方がわかりません…
(いろいろ検索してみたんですが・・・)
GetModuleFileNameを使ったファイルの指定の例を教えていただけないでしょうか?

補足日時:2006/01/30 20:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報