プロが教えるわが家の防犯対策術!

C言語でコンソールアプリケーションを作っています。
ファイルをexeにドロップして実行し、別のファイルに結果を出力させたいのですが、出力ファイルが作成されません。

どのようにすればよろしいのでしょうか。

コンソールから渡すときはファイルが作成されます。
コンパイラはBorland C++ Compiler 5.5を使用しています。
以下にコードの一部を掲載します。

int main(int argc, char *argv[])
{
 char filename[256];
 FILE *inputFile;
 FILE *outputFile;
 int i;
 for(i=1; i<argc; i++)
 {
  if((inputFile=fopen(filename,"r")) == NULL)
  {/*エラー処理*/}
  sprintf(filename,"result%d.txt",i); // 出力ファイル名
  if((outputFile=fopen(filename,"w")) == NULL)
  {/*エラー処理*/}
  for(;;)
  {
   char ss[1024];
   if(fgets(ss,1024,inputFile) ==NULL) break;
   fputs(ss,outputFile);
  }
  fclose(inputFile);
  fclose(outputFile);
 }
 return 0;
}

A 回答 (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();
}
    • good
    • 0
この回答へのお礼

ありがとうございました。
教えていただいたディレクトリに作成されていました。

起動方法によってカレントディレクトリが異なるとは、全く知りませんでした。

お礼日時:2007/09/19 21:20

★引数を参照していません。


・どこで 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;
}
以上。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/19 21:21

ファイルが作成されないって、どこに作成されることを期待していますか?



ソースを見る限りパスの指定がないようなのでCMD.exeと同じ場所に出来ていると思うのですが…

この回答への補足

自作のexeファイルと同じディレクトリに作成したいのです。
CMD.exeと同じディレクトリを探してみましたが、見つかりませんでした。

CMD上で
 fileout.exe inputfile.txt
のようにファイルを渡したときは同じディレクトリに作成されます。

補足日時:2007/09/19 19:54
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/19 21:22

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