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;
}
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();
}
ありがとうございました。
教えていただいたディレクトリに作成されていました。
起動方法によってカレントディレクトリが異なるとは、全く知りませんでした。
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;
}
以上。
No.1
- 回答日時:
ファイルが作成されないって、どこに作成されることを期待していますか?
ソースを見る限りパスの指定がないようなのでCMD.exeと同じ場所に出来ていると思うのですが…
この回答への補足
自作のexeファイルと同じディレクトリに作成したいのです。
CMD.exeと同じディレクトリを探してみましたが、見つかりませんでした。
CMD上で
fileout.exe inputfile.txt
のようにファイルを渡したときは同じディレクトリに作成されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access クエリ実行が急に非常に...
-
OLE又はDDEを使うVISUAL BESIC...
-
eclipseで作ったプログラムを他...
-
VC++から引数付きexeファイルの...
-
デスクトップにショートカット...
-
VB6で、C言語の(argv,argc)み...
-
LINK : fatal error LNK1104に...
-
JAVAのAPIのコールの仕方で質問...
-
64bit環境で32bitのodbc参照
-
ファイル名の先頭が数字だと駄...
-
フォルダ内の特定 拡張子のファ...
-
xismoについてです!開こうとす...
-
vscodeを最近いれてjavaを勉強...
-
ディレクトリを変更して外部コ...
-
SHELLを使ったファイル起動につ...
-
jarファイルをダブルクリックで...
-
htaファイルが実行されません
-
コンポーネント`MSCOMM32.cox'...
-
VBAで他のプログラムが起動して...
-
VBからhtaファイルを開くには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access クエリ実行が急に非常に...
-
JavaScriptでコマンドプ...
-
OLE又はDDEを使うVISUAL BESIC...
-
VC++から引数付きexeファイルの...
-
VBAでEXEファイルを動かす方法...
-
LINK : fatal error LNK1104に...
-
64bit環境で32bitのodbc参照
-
WScript.Echo と msgbox
-
batからexeを実行し戻り値を受...
-
VBAでMP3を鳴らしたい
-
コマンドプロンプトで外のexeや...
-
batからexeを起動した際の戻り...
-
VBS形式ファイル:ダブルクリッ...
-
jarファイル実行時の環境変数の...
-
JAVA .jarファイルに再圧縮する...
-
jarファイルとjava.exeの関連付...
-
VBSでEXCELのXLSTARTにあるマク...
-
コンポーネント`MSCOMM32.cox'...
-
ローカルのHTMLからexeファイル...
-
c/c++ ビルドしたにもかかわら...
おすすめ情報