GetSaveFileName関数とC++のofstreamの関係について
Posted: 2010年3月17日(水) 20:56
こんばんは。
今回はWindows APIでファイルを保存する時のウインドウを開くためのGetSaveFileName関数と、C++でのファイル出力に使うofstreamの関係について質問させていただきます。
現在簡単なアプリケーションを作っていて、ファイルを出力するためのボタンを押すと保存先をWindows APIの関数であるGetSaveFileName関数を使ってファイルを指定した後、ファイルが保存されます。
ここまでは、問題ありません。
その次に、エラーの判断のためにログをファイルに保存する自作クラスで、ログを取ろうとすると実行ファイルからの相対パスではなくて、GetSaveFileName関数で指定したパスに保存されてしまいます。
なお、GetSaveFileName関数を呼び出す前は実行ファイルからの相対パスになっています。
流れとしては、
①log.txtとしてofstreamを使い、実行ファイルがあるところに作成する。(ここは問題なし)
例 : ofstream fout( TEXT( "log.txt" ), ios_base::app );
②GetSaveFileName関数を使い、出力するファイル(log.txtとは異なる)を指定(今はdata.bin)する。
③ofstreamを使い、②で得た出力するファイルのパスを使い、ファイルの出力が終了する。(ここも問題なし)
例 : ofstream fout( path ); //出力するファイルのパスをpathとしている。
④log.txtとしてofstreamを使い、ログを追加書き込みする。
例 : ofstream fout( TEXT( "log.txt" ), ios_base::app );
(ここで問題が生じ、data.binがある場所と同じ場所にlog.txtが作成される。)
となっています。
日本語のパスに対応するため、
setlocale( LC_ALL, "japanese" );
としています。
どなたかこれを解決する方法を教えていただけないでしょうか?
よろしくお願いします。
今回はWindows APIでファイルを保存する時のウインドウを開くためのGetSaveFileName関数と、C++でのファイル出力に使うofstreamの関係について質問させていただきます。
現在簡単なアプリケーションを作っていて、ファイルを出力するためのボタンを押すと保存先をWindows APIの関数であるGetSaveFileName関数を使ってファイルを指定した後、ファイルが保存されます。
ここまでは、問題ありません。
その次に、エラーの判断のためにログをファイルに保存する自作クラスで、ログを取ろうとすると実行ファイルからの相対パスではなくて、GetSaveFileName関数で指定したパスに保存されてしまいます。
なお、GetSaveFileName関数を呼び出す前は実行ファイルからの相対パスになっています。
流れとしては、
①log.txtとしてofstreamを使い、実行ファイルがあるところに作成する。(ここは問題なし)
例 : ofstream fout( TEXT( "log.txt" ), ios_base::app );
②GetSaveFileName関数を使い、出力するファイル(log.txtとは異なる)を指定(今はdata.bin)する。
③ofstreamを使い、②で得た出力するファイルのパスを使い、ファイルの出力が終了する。(ここも問題なし)
例 : ofstream fout( path ); //出力するファイルのパスをpathとしている。
④log.txtとしてofstreamを使い、ログを追加書き込みする。
例 : ofstream fout( TEXT( "log.txt" ), ios_base::app );
(ここで問題が生じ、data.binがある場所と同じ場所にlog.txtが作成される。)
となっています。
日本語のパスに対応するため、
setlocale( LC_ALL, "japanese" );
としています。
どなたかこれを解決する方法を教えていただけないでしょうか?
よろしくお願いします。