プロが教える店舗&オフィスのセキュリティ対策術

実行ファイルのあるディレクトリに結果を出力するCで書いたプログラムがあります。
この実行ファイルのショートカットを作り、それを起動したところ、結果が手元ではなく、実行ファイルのあるディレクトリに作成されてしまい困っています。

ショートカットをおいたディレクトリに出力するようにするにはどうやったらよいのでしょうか?
実行ファイルのソースリストはありますので、実行ファイルの修正も可能です。

ソースリストを見たところ、結果を出力するファイルは、
 fp = fopen("temp.txt", "w");
でファイルをオープンしていました。
なお、実行環境は、WinXPです。
よろしくお願いします。

A 回答 (1件)

>実行ファイルのあるディレクトリに結果を出力するCで書いたプログラムがあります。



実行ファイル名を取得して、パス名解析などして出力ファイル名を作成している。
という認識でよろしいでしょうか?

>ソースリストを見たところ、結果を出力するファイルは、
> fp = fopen("temp.txt", "w");
>でファイルをオープンしていました。

こちらは「カレントディレクトリ」に出力するよう指示しているので、
「実行ファイルのあるディレクトリに結果を出力する」にはなっていませんが。
# fopenの前にカレントディレクトリを実行ファイルのある場所に変更していればその限りではありません。


>ショートカットをおいたディレクトリに出力するようにするにはどうやったらよいのでしょうか?

ショートカットから起動した場合、どのショートカットから起動したのか…というのを取得する方法がありますかね?
# なさそうな気もしますが……

ショートカットのプロパティでカレントディレクトリが設定できますからそちらで設定する。
ということになるかと。
# 「作業フォルダ」とかの名前になってるかと。


プログラム実行中でもそのプロセスのカレントディレクトリは変更される可能性がありますから…
「カレントディレクトリにファイルを出力」「カレントディレクトリ下のファイルから入力」という組み方は問題になる場合がある。というコトは認識しておいた方がいいでしょう。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
>ショートカットのプロパティでカレントディレクトリが設定できますからそちらで設定する。
ありました。できました!!


>こちらは「カレントディレクトリ」に出力するよう指示しているので、
>「実行ファイルのあるディレクトリに結果を出力する」にはなっていませんが。
このプログラムを今まで使っていて、「実行ファイルのあるディレクトリ」=「カレントディレクトリ」と理解していました。
「実行ファイルのあるディレクトリ」と「カレントディレクトリ」は違うのですね。勘違いしていました。

ということは、普通の実行ファイルの起動では、「カレントディレクトリ」が「実行ファイルのあるディレクトリ」に設定されて起動されている、ということですね。
ショートカットでの起動では、プロパティでカレントディレクトリの設定後に、実行ファイルが起動されるわけですね。
ショートカットを作ると、デフォルトで、「実行ファイルのあるディレクトリ」をカレントディレクトリに設定しているので、結果、ショートカットを作っても、実行ファイルのあるディレクトリにファイルが作成されていたわけですね。
納得しました。

お礼日時:2012/07/04 17:02

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