• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルをドロップするとfopenからファイルが作成できません)

ファイルをドロップするとfopenからファイルが作成できません

このQ&Aのポイント
  • C言語でコンソールアプリケーションを作成中ですが、ファイルをexeにドロップしても出力ファイルが作成されません。
  • コンソールから渡すときはファイルが作成されます。使用しているコンパイラはBorland C++ Compiler 5.5です。
  • どのようにすれば出力ファイルを作成することができるでしょうか。

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

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

うちの環境(WindowsXP)での場合ですが・・・ ダブルクリックで実行した場合のカレントディレクトリは、 exeファイルと同じ場所になりますが、 ドラッグ&ドロップで実行した場合のカレントディレクトリは、 環境変数 USERPROFILE と同じ場所になります。 例: C:\Documents and Settings\username exeの場所や、ドラッグしたファイルの場所には関係なく、固定のようです。 ディレクトリを指定せず保存した場合、ここにファイルが作られていると思います。 下記のようなプログラムで、実行時のカレントディレクトリを調べてみて下さい。 #include <stdio.h> #include <windows.h> void main(void) { char s[255]; char c; GetCurrentDirectory(255,s); printf("%s\n", s); c = getchar(); }

kuhaku
質問者

お礼

ありがとうございました。 教えていただいたディレクトリに作成されていました。 起動方法によってカレントディレクトリが異なるとは、全く知りませんでした。

その他の回答 (2)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★引数を参照していません。 ・どこで argv[i] の引数文字列を参照しているのですか?  ドロップしたファイル名は引数文字列としてプログラムに渡されます。  この引数は argv[i] として参照できます。 >if((inputFile=fopen(filename,"r")) == NULL)  ↑  この行の『filename』を『argv[i]』に変更すれば良いのでは? ・プログラムの処理はドロップファイルのコピーですか?  それなら下のようにサンプルで出来そうです。 サンプル: int main( int argc, char *argv[] ) {  char filename[ 256 ];  char buff[ 1024 ];  FILE *fpi;  FILE *fpo;  int i;    for ( i = 1 ; i < argc ; i++ ){   sprintf( filename, "result%d.txt", i );      if ( (fpi = fopen(argv[i],"r")) != NULL ){    if ( (fpo = fopen(filename,"w")) != NULL ){     while ( fgets(buff,sizeof(buff),fpi) != NULL ){      fputs( buff, fpo );     }     fclose( fpo );    }    fclose( fpi );   }  }  return 0; } 以上。

kuhaku
質問者

お礼

迅速な対応、ありがとうございました。

  • bardfish
  • ベストアンサー率28% (5029/17766)
回答No.1

ファイルが作成されないって、どこに作成されることを期待していますか? ソースを見る限りパスの指定がないようなのでCMD.exeと同じ場所に出来ていると思うのですが…

kuhaku
質問者

お礼

解決することができました。 迅速な対応、ありがとうございました。

kuhaku
質問者

補足

自作のexeファイルと同じディレクトリに作成したいのです。 CMD.exeと同じディレクトリを探してみましたが、見つかりませんでした。 CMD上で  fileout.exe inputfile.txt のようにファイルを渡したときは同じディレクトリに作成されます。