• ベストアンサー

fopenでのパス指定

毎度お世話になります。 ただ今VS2005でWindowsアプリケーションの実装を行っています。 fopenでパス指定をしてファイルを開くとき、  fopen("C:\\Test\\data.txt", w); としますが、GetModuleFileNameで取得したパス↓  GetModuleFileName(NULL, szPath, sizeof(szPath)); を使用したいとき、単に  fopen(szPath, w); ではできません。これはszPathの中身が  C:\Test\data.txt となっているためにfopenでは開けないんだと思うのですが、 わざわざszPathの文字を1文字づつ見ていって、 "\"があったときに"\"を付け足す… という作業をしなければならないのでしょうか。 他に解決策があるのでしょうか。 ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.4

C:\\Test\\data.txt のようにする必要があるのは、#2さんの指摘のようにソースコード上で直接記述する場合だけです。 なので、既にszPathの内容が C:\Test\data.txt であれば、そのままfopenに渡せばよいです。

mymusic54
質問者

お礼

ご無沙汰しております。 やりたい内容ができましたので報告させていただきます。 szPathの内容は"\\"のように変更せずともそのまま fopenに渡せばできるのですね。 勉強不足でごめんなさい。 ありがとうございました。

その他の回答 (3)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

まずは中身をTRACE等で確認しましょう。 TRACE("%s\n",szPath); と、書くと、VCの出力ウィンドウにszPathの中身が表示されます。

mymusic54
質問者

お礼

szPathの中身を確認したところ、  C:\Test\data.exe のようになっていました。 勉強不足でごめんなさい。 下記にもご指摘いただいたため、これから "data.exe"を取り除き、"data.txt"を結合いたしました。 よって今の段階ではszPathの中身は  C:\Test\data.txt のようになっています。 ご指摘ありがとうございました。 これからfopenを行うためには、  C:\\Test\\data.txt と指定しなければなりませんよね。 "\"を"\\"と書き換えるには何か関数があるのでしょうか。 このお礼の場で質問してしまいごめんなさい。

  • jgk
  • ベストアンサー率75% (104/138)
回答No.2

ソースコード上では\はエスケープシーケンスの開始文字のため、 \自体を使いたい場合、\\と表記する必要があるだけで、 実際に格納されるののは\だけです。 GetModuleFileNameは、実行ファイルのパスを取得するもので、 実行ファイルと同じフォルダのdata.txtを開きたいならば、 GetModuleFileNameの結果から実行ファイルの名前を取り除き、 data.txtを連結する必要がありますがその辺は大丈夫でしょうか? (VC++であれば_splitpath、_makepathで処理してしまうのが楽かなと思います)

mymusic54
質問者

お礼

どうも、迅速なご回答ありがとうございます。 先ほど、GetModuleFileNameで取得したパス名から、 _splitpath、_makepathを使ってexeファイルを取り除き、 data.txtを連結することができました。 関数を教えて頂き感謝します。

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.1

まず、以下の関数ですが、 >GetModuleFileName(NULL, szPath, sizeof(szPath)); これは「現在のプロセスを作成するために使われたファイルのパス」が取得できます。要するに今実行しているexeファイル名です。 そのexeファイルに、 >fopen(szPath, w); で書き込みオープンしようとしているわけで、まず失敗すると思います。 やりたいことは、exeと同じパスのdata.txt(仮)をオープンしたいのでしょうか?

mymusic54
質問者

お礼

とても迅速なご回答、ありがとうございます。 なるほど。 GetModuleFileNameでは.exeまでを取得するのですね。 勉強不足でごめんなさい。 はい。 私のやりたいことは、exeと同じフォルダにdata.txtをオープンしたいのです。取得したパス名の"\"を"\\"と書き換えてfopenするべきですよね。

関連するQ&A