アプリ版:「スタンプのみでお礼する」機能のリリースについて

毎度お世話になります。
ただ今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文字づつ見ていって、
"\"があったときに"\"を付け足す…
という作業をしなければならないのでしょうか。

他に解決策があるのでしょうか。
ご教授お願いします。

A 回答 (4件)

C:\\Test\\data.txt


のようにする必要があるのは、#2さんの指摘のようにソースコード上で直接記述する場合だけです。

なので、既にszPathの内容が
C:\Test\data.txt
であれば、そのままfopenに渡せばよいです。
    • good
    • 3
この回答へのお礼

ご無沙汰しております。

やりたい内容ができましたので報告させていただきます。
szPathの内容は"\\"のように変更せずともそのまま
fopenに渡せばできるのですね。

勉強不足でごめんなさい。
ありがとうございました。

お礼日時:2009/12/18 14:35

まずは中身をTRACE等で確認しましょう。


TRACE("%s\n",szPath);
と、書くと、VCの出力ウィンドウにszPathの中身が表示されます。
    • good
    • 1
この回答へのお礼

szPathの中身を確認したところ、
 C:\Test\data.exe
のようになっていました。
勉強不足でごめんなさい。

下記にもご指摘いただいたため、これから
"data.exe"を取り除き、"data.txt"を結合いたしました。

よって今の段階ではszPathの中身は
 C:\Test\data.txt
のようになっています。
ご指摘ありがとうございました。

これからfopenを行うためには、
 C:\\Test\\data.txt
と指定しなければなりませんよね。

"\"を"\\"と書き換えるには何か関数があるのでしょうか。
このお礼の場で質問してしまいごめんなさい。

お礼日時:2009/12/10 14:35

ソースコード上では\はエスケープシーケンスの開始文字のため、


\自体を使いたい場合、\\と表記する必要があるだけで、
実際に格納されるののは\だけです。

GetModuleFileNameは、実行ファイルのパスを取得するもので、
実行ファイルと同じフォルダのdata.txtを開きたいならば、
GetModuleFileNameの結果から実行ファイルの名前を取り除き、
data.txtを連結する必要がありますがその辺は大丈夫でしょうか?
(VC++であれば_splitpath、_makepathで処理してしまうのが楽かなと思います)
    • good
    • 0
この回答へのお礼

どうも、迅速なご回答ありがとうございます。

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

お礼日時:2009/12/10 14:27

まず、以下の関数ですが、


>GetModuleFileName(NULL, szPath, sizeof(szPath));
これは「現在のプロセスを作成するために使われたファイルのパス」が取得できます。要するに今実行しているexeファイル名です。

そのexeファイルに、
>fopen(szPath, w);
で書き込みオープンしようとしているわけで、まず失敗すると思います。

やりたいことは、exeと同じパスのdata.txt(仮)をオープンしたいのでしょうか?
    • good
    • 0
この回答へのお礼

とても迅速なご回答、ありがとうございます。

なるほど。
GetModuleFileNameでは.exeまでを取得するのですね。
勉強不足でごめんなさい。

はい。
私のやりたいことは、exeと同じフォルダにdata.txtをオープンしたいのです。取得したパス名の"\"を"\\"と書き換えてfopenするべきですよね。

お礼日時:2009/12/10 14:17

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A