ショートカットで起動した場合のカレントディレクトリ

このQ&Aのポイント
  • ショートカットで起動した場合のカレントディレクトリに結果を出力するプログラムの修正方法を教えてください。
  • 実行ファイルのあるディレクトリに結果を出力するプログラムを修正する方法を教えてください。
  • ショートカットを起動したときに結果が実行ファイルのあるディレクトリに作成されてしまう問題を解決する方法を教えてください。
回答を見る
  • ベストアンサー

ショートカットで起動した場合のカレントディレクトリ

実行ファイルのあるディレクトリに結果を出力するCで書いたプログラムがあります。 この実行ファイルのショートカットを作り、それを起動したところ、結果が手元ではなく、実行ファイルのあるディレクトリに作成されてしまい困っています。 ショートカットをおいたディレクトリに出力するようにするにはどうやったらよいのでしょうか? 実行ファイルのソースリストはありますので、実行ファイルの修正も可能です。 ソースリストを見たところ、結果を出力するファイルは、  fp = fopen("temp.txt", "w"); でファイルをオープンしていました。 なお、実行環境は、WinXPです。 よろしくお願いします。

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>実行ファイルのあるディレクトリに結果を出力するCで書いたプログラムがあります。 実行ファイル名を取得して、パス名解析などして出力ファイル名を作成している。 という認識でよろしいでしょうか? >ソースリストを見たところ、結果を出力するファイルは、 > fp = fopen("temp.txt", "w"); >でファイルをオープンしていました。 こちらは「カレントディレクトリ」に出力するよう指示しているので、 「実行ファイルのあるディレクトリに結果を出力する」にはなっていませんが。 # fopenの前にカレントディレクトリを実行ファイルのある場所に変更していればその限りではありません。 >ショートカットをおいたディレクトリに出力するようにするにはどうやったらよいのでしょうか? ショートカットから起動した場合、どのショートカットから起動したのか…というのを取得する方法がありますかね? # なさそうな気もしますが…… ショートカットのプロパティでカレントディレクトリが設定できますからそちらで設定する。 ということになるかと。 # 「作業フォルダ」とかの名前になってるかと。 プログラム実行中でもそのプロセスのカレントディレクトリは変更される可能性がありますから… 「カレントディレクトリにファイルを出力」「カレントディレクトリ下のファイルから入力」という組み方は問題になる場合がある。というコトは認識しておいた方がいいでしょう。

usatan2
質問者

お礼

早速の回答ありがとうございます。 >ショートカットのプロパティでカレントディレクトリが設定できますからそちらで設定する。 ありました。できました!! >こちらは「カレントディレクトリ」に出力するよう指示しているので、 >「実行ファイルのあるディレクトリに結果を出力する」にはなっていませんが。 このプログラムを今まで使っていて、「実行ファイルのあるディレクトリ」=「カレントディレクトリ」と理解していました。 「実行ファイルのあるディレクトリ」と「カレントディレクトリ」は違うのですね。勘違いしていました。 ということは、普通の実行ファイルの起動では、「カレントディレクトリ」が「実行ファイルのあるディレクトリ」に設定されて起動されている、ということですね。 ショートカットでの起動では、プロパティでカレントディレクトリの設定後に、実行ファイルが起動されるわけですね。 ショートカットを作ると、デフォルトで、「実行ファイルのあるディレクトリ」をカレントディレクトリに設定しているので、結果、ショートカットを作っても、実行ファイルのあるディレクトリにファイルが作成されていたわけですね。 納得しました。

関連するQ&A

  • Cronでのカレントディレクトリについて

    3日前からVine Linuxを初めてインストールしまして、 自宅サーバをやろうとしている、初心者です。 これまではxrea.comのレンタルスペースを借りてphpでコンテンツを作っていました。 phpをCronを使って、定期的実行する際に [シェルファイル] #!/bin/sh #PHP /usr/bin/php /var/www/html/filename.php exit のようにしてファイル操作をするphpを実行させたのですが [filename.php] <?php $fp=fopen("../data/dat.txt","w"); fputs($fp,$data); fclose($fp); ?> で実行したところURLからは問題なく dat.txt の内容を編集することができるのですが cronからだと PHP Warning: fopen(../data/data.txt): failed to open stream: No such file or directory となります。 そこでカレントディレクトリを調べると /root/PHPs/ となっていたので、そのようなエラーになっていました (1)カレントディレクトリを変更するコードを毎回phpに組み込む (2)フルパスでファイルを指定する ことでこのトラブルは回避されるのですが、 xrea.comでは、相対パス、カレントディレクトリを毎回指定しなくても、実行できていました。 cronでphpを実行する際に、phpが存在するディレクトリへ 自動でカレントディレクトリを移動するようにしたいです。 そのような方法があれば、教えてくください。

  • 【Mac/Xcode】カレントディレクトリのファイルの読み込みについて

    Xcode(C++)で、設定ファイル(test.txt)を読み込むプログラムを作成しています。 困っているのは、できあがった実行ファイル(test.app)と同じディレクトリにその設定ファイルを置いて、test.appをダブルクリックで実行しても、設定ファイルを読み込めないでいます。(VC++ではできたのですが) もちろん、明示的にtest.txtのパスを下記のソースで指定すれば読み込めます。実行する場所が毎回決まっていないので、カレントディレクトリ内のファイルが読み込めるようにしたいです。 ソースは以下のように書いてます。 Xcode側で何か設定とかがあるのでしょうか? どなたかご存知の方がいらっしゃいましたらご教授のほどよろしくお願いいたします。 ※test.appの場所は、"プロジェクト名/build/Debug/test.app" です。 -------------------------------------------- void main(){ FILE* fp; char s[256];  char *filename = "test.txt"; fp = fopen(filename, "r"); if( ! fp){ printf("ファイルオープン失敗"); // ここに入る return;  } while (fgets(s, 256, fp) != NULL) { // test.txt を読み込む処理 (中略) } (中略) }

  • 連続したファイル名を作成する方法を教えてください

    プログラムを作成しています。 一つだけのファイルにデータを出力するのであれば fp = fopen("temp.txt", "w"); と宣言すればよいですが、 今、 001.txt 002.txt * * * 100.txt と言うぐらいに大量のファイルを作成する必要があります。 この場合どのようにしたらよいでしょうか?

  • VBAのSHELLを用いてEXEファイルを起動したものの、微妙にうまくいかない

    エクセルのVBAのshellを用いて、exeファイルを起動させてました。 exeファイルはCを用いたシンプルなもので、テキストファイルを作成します。(ソースは下記参照) C:\testのディレクトリにエクセルファイルを作成し、 Shell "C:\test\test.exe" を実行させたところ、ファイルはC:\testのディレクトリに出来ずに、マイドキュメントに出来ました。 このexeファイルを直接ダブルクリックしたときは、C:\testのディレクトリにテキストファイルが作成されます。 ダブルクリックしたときと同じように、C:\testのディレクトリにテキストファイルを作成する方法があれが教えてください。 よろしくおねがいします。 (ソース、hello.txtというファイルをつくり、hello!を書く) main( ) { FILE *fp; /* ファイルポインタ */ fp = fopen( "hello.txt", "w"); fprintf(fp,"hello!\n"); fclose(fp); return 0; }

  • オープンモードについて

    この下のソースを実行するとファイルの中身が「97へ」と出ます。 この「へ」とは何なのでしょうか?97にしたいのですが、どうすればよいのでしょうか?またなぜこのような結果になってしまったのでしょうか? int main(void) { FILE *fp; int d=97; fp=fopen("txt.txt","w+"); fprintf(fp,"%d",d); fscanf(fp,"%d",&d); printf("%d",d); fclose(fp); return 0; } 環境はVCC++2005です。

  • 別ユーザ所有のディレクトリ内にファイル作成できない

    こんばんは。 タイトルのとおりですが、まずPHPでディレクトリを作成し、 その中にindex.htmlを作成しようとしているのですが上手くいきません。 PHPで作成したディレクトリの所有者はapacheになっているためかと思い、 実際にFTPを通して自分で作成したディレクトリの中にindex.htmlを作成したところ上手くいきました。 ディレクトリのパーミッションはいずれもスクリプトにより0777を指定しています。 このように、PHPのみでディレクトリを作成し、その中にファイルを作成する といったことが出来ずにいます。解決策等ございましたらお教えください。 参考までに、ソースを掲載しておきます。 これを設置するディレクトリのパーミッションは0777にしてみましたが、出力は「fopen error」になります。 <?php $path = "./dir/"; if(mkdir($path, 0, true)){ chmod($path, 0777); if($fp = fopen($path."index.html", "w")){ fputs($fp, $put); fclose($fp); print "Created!"; }else{ print "fopen error"; } }else{ print "mkdir error"; } ?>

    • ベストアンサー
    • PHP
  • ディレクトリの作り方について

    初心者の者です。 プログラムでディレクトリ(フォルダ)の作り方をご存知の方教えてください。 fopen("data/○○.dat", "w")で、 dataというディレクトリ(フォルダ)の中に○○.datというファイルを 作ることができるという事は分かったのですが、この方法では あらかじめdataというディレクトリを作らなければなりません。 プログラムを実行させるときにディレクトリを作り、その中にファイルを 作るにはどのようにすればよいでしょうか? また、動作環境はWindowsとUNIXの両方で使いたいのですが, 使い分けなければならないのでしょうか? よろしくお願いします。

  • サーバー内のファイルは、public_html配下でないとだめ?

    サーバー内にファイルを保存するテストプログラムを 作成しています。 C:┬public_html ←公開用 │ └Temp     ←非公開 公開したディレクトリ配下にファイルを保存する事は できるのですが、非公開のディレクトリに保存すると アクセスできないとエラーが出力されます。 テキストファイル等スクリプト中で作成されるファイ ルは、公開されているディレクトリ配下でないといけ ないのでしょうか? もし公開されいているディレクトリ配下の場合、皆さ んはどのようにアクセスされないように対策している のでしょうか? -----テストプログラムです。----- <?php // OK // $filename = "moji.dat"; // NG // $filename = "C:\Temp\moji.dat"; $str = "文字列"; $fp = fopen($filename,"w"); fputs($fp, $str); fclose($fp); $fp = fopen($filename,"r"); $str = fgets($fp, 512); fclose($fp); print("$str"); ?> -----テストプログラムです。-----

    • ベストアンサー
    • PHP
  • flockについて

    PHPを始めようと思っていきなりつまずいています。 flockについてなんですが <?php $fp = fopen("ファイル名","a"); flock($fp,LOCK_EX); fputs($fp,"aaa"); flock($fp,LOCK_UN); fclose($fp); ?> は正しいですが $fp = fopen("ファイル名","w") とかにしてしまうとファイルロックの意味がありませんよね (ロックする前にファイルを丸めてしまってて、このプロセスの後readすると実際と異なる値を読んでしまうから) で、この場合 (つまり"w"や"w+"をファイルオープンの引数にとってflockするとき) fopen の前に、ロックを示すためのディレクトリを作成しておいて、書き込んだ後にディレクトリを削除する、というような独自の仕組みを作る必要があると思うんですが、具体的にどういうソースになるか教えてください

    • ベストアンサー
    • PHP
  • VC++でUTF-8のファイルを出力したい

    VisualStudio2005で以下のコードを実行したとき、ファイルをUTF-8で作成したいのですが、なにか方法がありますか? 現状では、SJISで出力されてしまいます。 ソースは、『ファイル』-『保存オプションの詳細設定』で『UTF-8(BOM付き)』にしてあります。 #include <stdio.h> int main(int argc, char* argv[]) {     FILE *fp;     fp = fopen( "c:/temp/log.txt", "w");     fprintf( fp, "%s\n", "あいうえお" );     fclose( fp );     return 0; } ちなみに、”あいうえお”の部分を(EmEditorで)SJISに無くてUTF-8にだけ存在する文字にした場合、VisualStudioのエディタ上では正しく文字が表示されます。 したがって、VisualStudio内ではリテラルの文字コードはUTF-8で扱われていると考えられます。・・・が、上記プログラムで出力すると文字化けします。つまり、SJISで出力されてしまいます。 ご教授のほど、よろしくお願いいたします。

専門家に質問してみよう