C言語で連続ファイル作成方法とエラー対処法について

このQ&Aのポイント
  • C言語で連続でファイルを作成する方法について質問です。for文を使用してファイル名を少しずつ変える方法を教えてください。
  • C言語でfor文を使用してファイルを作成しようとしていますが、エラーが発生しています。エラーの原因と対処法を教えてください。
  • 初心者ですが、C言語で連続でファイルを作成する方法について質問です。具体的なコードとともに教えていただけると助かります。
回答を見る
  • ベストアンサー

連続でファイル作成

連続でファイル作成 最終的にパラパラアニメの要領でアニメーションを作ろうと考えています。 そこで、C言語でfor文を使ってたくさんのファイルを作成することを考えました。 そこで質問なのですが、ファイル名を少しずつ変える方法はどうしたらいいのでしょうか? 最初、for文中に fd = fopen("test%d.txt",i,"w"); と書いてみたのですが、『too many arguments to function ‘fopen’』とエラーが出ました。 (もちろん整数iはi++でfor文中に入れてあります。つまり、test1,test2,...,test10のようなテキストファイルを作成したかったという意味です。) C言語を始めたばかりなのでとても初歩的な質問かと思いますが、わかる方どうぞよろしくお願いいたします。

  • RAM46
  • お礼率100% (6/6)

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

  • ベストアンサー
  • taka37777
  • ベストアンサー率30% (166/544)
回答No.1

例えば char file[1024]; : sprintf(file, "test%d.txt", i); fd = fopen(file, "w"); : のようになります。

RAM46
質問者

お礼

どうもありがとうございます。 回答いただいたとおり char file[1024] を用意して、無事成功しました☆

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

こんな感じですね。 int i; char filename[100]; FILE *fp; for(i=0;i<100;i++){ snprintf(filename,sizeof filename,"test%d.txt",i); if((fp = fopen(filename,"w"))!=NULL){ fclose(fp); }else{ fprintf(stderr,"open error (%s)\n",filename); } }

RAM46
質問者

お礼

とてもご丁寧にどうもありがとうございました!! snprintf()を始めて知りました。 今後さらに勉強していきたいと思います。

関連するQ&A

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

    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; }

  • fopenの書き出しでファイル作成できません。

    Microsoft Visual C++ 2010を使ってC言語の勉強をしております。 大変初歩的な内容で申し訳ないのですが、 fopenで操作モードを「書き出し」としたときにファイルが存在しない場合、新たにファイルが作成されるという認識で正しいでしょうか。 しかし、実際にプログラムを作成するとエラーが発生してしまうので、困っております。 もし役立つのであれば、ソースをご覧ください。 ――――――――――――― #include <stdio.h> #include <stdlib.h> int main(void) { int i; double x, y; char fname[20]; FILE *fp; printf("input filename : "); scanf_s("%s", fname); fp = fopen(fname, "w"); … ――――――――――――― 自分の間違いをご指摘いただけるとありがたいです。 どうかよろしくお願いいたします。

  • ファイルオープン&ファイルクローズ

     C言語でデータの種類ごとにディレクトリーを用意し、データを振り分けたいのですが。。  fopenすると同じディレクトリーでしかファイルを呼び出したり、保存したりしかできないですよね。ちがうディレクトリーのファイルの呼び出し、ファイルの保存は出来ないでしょうか?また、ディレクトリーの作成なんてことは、C言語ではできないでしょうか?  誰か知っている人がいましたら、よろしくお願いします。

  • C言語でのCSVファイルの読み出し方法

    C言語の勉強をしています。 test.csvというファイル名のCSVファイルで 項目,名前,身長,体重,血液型,合否(合格なら○不合格なら空欄) 1,太郎,150,55.6,A,○ 2,二郎,165.5,60,B 3,三郎,160.2,59.5,AB,○ と書かれたファイルを読もうと思いまして #include <stdio.h> #define i 1000 #define j 1000 main() { int d[i][j]; double... FILE *fp; fp=fopen(fp,"test.csv","r"); for(i=0;i<=2;i++) { for(j=0;j<=6;j++) { fscanf(fp,"%d",d[i][j]); } }... という感じで書いても読み込みません。 どのように書いたら読み込むでしょうか。 Cをはじめて間もないのでどなたか教えていただけないでしょうか よろしくお願いします。

  • C言語でのファイルへの出力について

    1つのプログラムで、複数のファイルを出力したいと考えております。 ファイル名も test_1.txt test_2.txt   ・   ・   ・ test_100.txt というように、番号のみ違うものに。 そして手動ではなく、for文などを用いてファイル名を決めたいです。 つまり、 for(i=0;i<100;i++){   fp = fopen("test_i.txt","w") } みたいなことをしたいのです。 でも上記のようだとエラーが出ます。 どうしたらよろしいのでしょうか…。

  • ファイルの作成・書き込み・読み込みについて

    ファイルの取り扱いについて、どのように記述すればいいのかが分かりません。 分からないことが多いので(1)~(4)の質問に分けています、Cの勉強は趣味程度にしかできていないので、詳しくご回答いただけると嬉しいです。 自分なりに書いてみます、間違いがあればご指摘宜しくお願いします。 (1)Aを頭文字にして100個のcsvファイルを作成 (a1,a2…a100) char A[100] FILE *fp; for(i=1;i<101;i++) { snprintf(A,sizeof A,"A%d.csv",i); if((fp = fopen(A,"w"))!=NULL) {exit(1);} } (2)A1を開きデータを入れる、この動作を同様に2~100で繰り返す。 A1に入れたいデータはx,y,zで1000行 fp = fopen("A1.csv","a"); for(z=1;z<11;z++) { for(y=1;y<11;y++) { for(x=1;x<11;x++) { fprintf(fp,"%d,%d,%d\n",x,y,z); } } } fclose(fp); これでこんな感じに書き込まれるはず・・・ 1,1,1 2,1,1 3,1,1  ・  ・  ・ 10,10,10 これを同様に2~100のファイルに対して一気に行いたいですが、書き方が分かりません。 (3)再びA1を開きx=10,Y=10の時のzの値を知りたい。 こんな事はできるのでしょうか? もし無理なら~行目のデータを呼び出す (4)そしてA1を開きx=10,Y=10の時の、zだけを上書き。 長くなってすいません、分からない事だらけなので宜しくお願いします。

  • テキストファイルの出力について

    今、学校の課題でC言語を使ってプログラムを作っています。 20000個のデータを読み込んで、200個ずつに区切り、別々のテキストファイルで出力するというものです。 最初につくったのは、以下の通りです。 *********************************************** FILE *fp; { int b,i=0; data[0][i]=trend_data[0][i]; data[1][i]=trend_data[1][i]; fp = fopen("D1.txt","w"); for(i=0;i<=199;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); } fclose(fp); fp = fopen("D2.txt","w"); for(i=200;i<=399;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); } fclose(fp); ・・・ ***************************************** これだと20000まで繰り返し記述しなければならずかなり困難だと思いました。そこで、ループを作ろうとしたのですが、テキストファイルをループを使って複数作成する方法がわかりません。 以下のようなプログラムを作ったのですが、テキストファイルが一つしか作られませんでした。 どのように記述すればよいのでしょうか? **************************************** FILE *fp; { int a,i=0; int b=1; int c=199; data[0][i]=trend_data[0][i]; data[1][i]=trend_data[1][i]; start: fp = fopen("D[1+b].txt","w"); for(i=a;i<=c;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); if(i > c) c = c+200; a = a+200; b++; goto start; fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); fclose(fp); } } ****************************************** よろしくお願い致します。

  • バッチファイルのfor文を使ってファイルサイズをMbyteで表したい。

    バッチファイルのfor文を使ってファイルサイズをMbyteで表したい。(WindowsXP) for文を使って、フォルダー内のファイル名とサイズ一覧を作ろうとしています。 1)for %%i in (c:\test\*.*) do echo %%i %%~zi>> c:\test\testfiles.txt で一応はできたのですが、これではファイルサイズがわかりにくいので、メガバイト単位にしたいのです。(だいたいわかればいいので1024で割るとかはしない) 2)for %%i in (c:\test\*.*) do echo %%i %%~zi/1000000>> c:\test\testfiles.txt 3)for %%i in (c:\test\*.*) do set /a x=%%~zi/1000000 & echo %%i %%x>> c:\test\testfiles.txt としてもうまくいきません。 %%~ziが数値でなく文字列のため、だと思うのですが、3)は%の付け方とかも間違ってそう。 どう書けばメガバイト単位で一覧を出せるでしょうか? あれ? 4)for %%i in (c:\test\* ) do if %%~zi GEQ 1000000 echo %%i>> c:\test\testfiles.txt とすれば1メガ以上のファイル名一覧が出ますね。 ということは%%~ziは数値なのか。  どなたか、どこが間違っているのか教えていただけないでしょうか

  • write関数でファイルディスクリプタfile(fp1)に出力されません

    宜しくお願い致します。Windows2000でCygwinを使用しています。 $ cat test6.c #include<stdio.h> int main(void){ FILE *fp1,*fp2; fp1=fopen("file.txt","w"); fp2=fopen("file.txt","a"); printf("fp1->fd=%d\n",fileno(fp1)); printf("fp2->fd=%d\n",fileno(fp2)); write("first",fileno(fp1),2); write("second",fileno(fp2),2); return 0; } $ gcc -o test6 test6.c $ test6 fp1->fd=3 fp2->fd=4 $ cat ./file.txt となり、 file.txtに"first"と"second"が出力されるとかと思いましたが空ファイルです。 これは何が原因なのでしょうか?

  • ファイルの読み込みが変

    Slackware(64bit)というLinuxでプログラミングしていました。 (gcc 4.3.3 glibc 2.9) そこで出た問題点をこのソースに書きます。 #include<unistd.h> #include<stdio.h> char buf[800]; FILE *fd; void op(void) { fd=fopen("/sys/class/power_supply/AC/online","r"); } int main(void) { int i,x; op(); for (i=0;i<5;i++) { fscanf(fd,"%d",&x); printf("%d",x); getchar(); rewind(fd); } fclose(fd); return 0; } (使い回しなので余計なものがついてます) fopenで開くファイルはパソコンのACアダプタが入ると'1'、入らないと'0'になります。 このプログラムを実行しました。 1(ACアダプタつけてenter) 0(はずしてenter) 0(つけてenter) 0(つけてenter) 0(つけてenter) では、fdをmainで宣言して、opの引数にすればとやってみたら、fscanfに渡るfdが、NULLでSIGSEGVを起こしました。 どうして、こうなるのでしょうか? 複数の関数でファイルをどう扱えばいいのですか?

専門家に質問してみよう