- ベストアンサー
ファイルをドロップするとfopenからファイルが作成できません
- C言語でコンソールアプリケーションを作成中ですが、ファイルをexeにドロップしても出力ファイルが作成されません。
- コンソールから渡すときはファイルが作成されます。使用しているコンパイラはBorland C++ Compiler 5.5です。
- どのようにすれば出力ファイルを作成することができるでしょうか。
- みんなの回答 (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(); }
その他の回答 (2)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★引数を参照していません。 ・どこで 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; } 以上。
お礼
迅速な対応、ありがとうございました。
- bardfish
- ベストアンサー率28% (5029/17766)
ファイルが作成されないって、どこに作成されることを期待していますか? ソースを見る限りパスの指定がないようなのでCMD.exeと同じ場所に出来ていると思うのですが…
お礼
解決することができました。 迅速な対応、ありがとうございました。
補足
自作のexeファイルと同じディレクトリに作成したいのです。 CMD.exeと同じディレクトリを探してみましたが、見つかりませんでした。 CMD上で fileout.exe inputfile.txt のようにファイルを渡したときは同じディレクトリに作成されます。
お礼
ありがとうございました。 教えていただいたディレクトリに作成されていました。 起動方法によってカレントディレクトリが異なるとは、全く知りませんでした。