• 締切済み

テキストファイルの同期

はじめまして、超初心者プログラマのmoominといいます。 ファイルの同期プログラムに関して質問があるのですが、 あるテキストファイルを、他のディレクトリのテキストファイルとを 常に同期をするプログラムを作成しています。 これが作成したソースです。 ------------------------- #include "stdafx.h" #include <stdio.h> #include <windows.h> int _tmain(int argc, char *argv[]) { FILE *fp,*copy; int buffer; fp=fopen("○○○/×××.txt","rb"); copy=fopen("aaa/fff.txt","wb"); for(int i=1;i>0;i++){ fread(&buffer,sizeof(buffer),1,fp); fwrite(&buffer,sizeof(buffer),1,copy); if(feof(fp)){ fclose(fp); fclose(copy); } } return 0; } VC2008を利用して作成していますが、 一度きりの同期なら可能なのですが、 常に同期するというプログラムがわかりません。 どう変えればよいでしょうか?

みんなの回答

  • arain
  • ベストアンサー率27% (292/1049)
回答No.2

>一度きりの同期なら可能なのですが、 >常に同期するというプログラムがわかりません。 >どう変えればよいでしょうか? 簡単なのは、無限ループとタイマ関数を使用するなどして定期的に質問の処理を繰り返すようにします。 簡単なコードっぽいもので表すと main() {   while(1)   {     一定時間待つ     ファイルの同期(質問文の処理)   } } って感じです。 但し、ループを抜けるための処理を作成するのが一手間かかりますが。 「常に」が「ファイル内容が更新された場合」であると、難易度が数十倍上がります。 「n回」であればwhile()でカウントすればよいので簡単ですが。 No.1氏 >であれば、ファイルをオープンする必要はないと思います。 質問者の処理ではオープンしてなきゃファイルポインタが見つからないから動作しませんよ

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>あるテキストファイルを、他のディレクトリのテキストファイルとを >常に同期をするプログラムを作成しています。 であれば、ファイルをオープンする必要はないと思います。

関連するQ&A

  • ファイルコピープログラムについて

    まだC言語とか始めたばかりであまりよく分からないのですが、 今、ドラッグしたファイルをデスクトップにコピーするプログラムを作成してるのですが、少し困ったことになりました・・・・ 一応ファイルのコピーをデスクトップに作成はできるのですが、 何故か、作成されたファイルのサイズが2バイト程大きくなります・・・。 ファイルサイズを変えずにコピーする方法が分かりません・・・ ソースを張っておきますので、誰か解決策を教えていただけないでしょうか? #include <stdio.h> #include <windows.h> int main(int argc,char *argv[]) { FILE *fp,*copy; int buf; if(argc>1){ rename(argv[1],"DATA.bin"); fp=fopen("DATA.bin","rb"); copy=fopen("c:/xxx/yyy/Desktop/COPY.bin","wb"); while(1){ fread(&buf,sizeof(buf),1,fp); fwrite(&buf,sizeof(buf),1,copy); if(feof(fp)){ puts("OK"); fclose(fp); fclose(copy); rename("DATA.bin",argv[1]); rename("COPY.bin",argv[1]); exit(1); } } } return 0; }

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

    for文の中でファイルの入出力をファイル名を変えながら行うことはできますか?作成したいプログラムは以下の通りになっています。 よろしくお願いします。 #include<stdio.h> main() { int i; FILE *fp; for(i=0;i<10;i++) {  fp=fopen("ココにiの値を入れたい.txt","w");  fprintf(fp,"%d\n",i);  fclose(fp); } return(0); }

  • テキストファイルへ半永久的に出力し続けることは可能でしょうか。

    こんにちは。いつもお世話になっております。 C言語で、半永久的に文字列をテキストファイルに出力し続ける、という事は可能でしょうか。要は、ファイルを無限に更新し続けるプログラムを書きたいと考えています。元のファイル(file.txt)の文字列を、形式を変えて、別のファイル(out.txt)に出力し続けたいのですがどうしても出力が止まってしまい上手くいきません。自分なりに以下のようなプログラムを作ってみました。何かアドバイスを頂けないでしょうか。 前提条件: ・別プログラムによりfile.txtは末尾に文章が追加され続けている ・本プログラムは半永久的に動き続ける #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<errno.h> #include<signal.h> #include<sys/types.h> int main () { int i = 0, j = 0, len; FILE *fp, *fp2; char buf[1024] = ""; char str[1024] = ""; while (1) { //ループ2周目以降なら一度クローズして開き直す if (i >= 1) { fclose (fp2); } if ((fp2 = fopen ("out.txt", "a")) == NULL) { printf ("out.txt:open error\n"); exit (-1); } //上と同じく if (i >= 1) { fclose (fp); } if ((fp = fopen ("file.txt", "r")) == NULL) { printf ("file.txt:open error\n"); exit (-1); } //既にout.txtに移した部分が重複しないようにfgetsで調整 if (i >= 1) { for (j = 0; j <= i; j++) { fgets (str, 1024, fp); } } //file.txtからout.txtに内容を移す while (1) { i++; if ((fgets (str, 1024, fp)) == NULL) break; if ((len = strlen (str)) >= 2) { str[len - 1] = '\0'; } else { break; } if (len <= 50) break; fprintf (fp2, "%s\n", str); } } return 0; } プログラムの内容は、 更新され続けるテキストファイル(file.txt)から、別のテキストファイル(out.txt)に出力するというプログラムです。(元となるfile.txtの内容を若干変えつつ、out.txtに出力することが本来の目的ですが、その部分は省略させて頂きました。) fopenで開くと、「その時点まで」のfile.txtしか開かれません。従って更新され続けているfile.txtの内容をコンスタントに読み取る為に、while文でfopenし続ける方法を取りました。しかし、out.txtを確認すると何故か一定の行からそれ以降が追記されないままでした。恐らく一度目のfopenにより開いたfile.txtの内容のみを抽出して、2度目以降のfopenによる読み取りが意味を為していないのではないかと推測しますが・・、どうなんでしょう。あまり自信はないです。 これを解決して半永久的に出力を続けるにはどうすればよいでしょうか。 上のプログラムや私の意図する所で何か気づかれた点や、おかしいと思われた点等ありましたら是非ご教授頂きたく思います。 どんな些細なことでも構いませんので、教えて頂けないでしょうか。 環境はCentosです。どうぞよろしくお願いします。

  • Cプログラミングの質問なのですが,

    Cプログラミングの質問なのですが, 以下のプログラムで正規乱数を発生させたいのですが,どこがおかしいのでしょうか? fp1のransuuはきちんとtxtで作成されています。 至急お助けください。 #include <stdio.h> #include<stdlib.h> #include<math.h> #define PI 3.141592653589793238 int main (void) { FILE *fp1,*fp2; int i,n; unsigned int x1,x2; double y1,y2; fp1=fopen("ransu.txt","r"); fp2=fopen("seikiransu.txt","w"); for(i=0;i<n;i++) { fscanf(fp1,"%lf",&x1); fscanf(fp1,"%lf",&x2); y1=sqrt(2)*sqrt(-2*log(x1))*cos(2*PI*x2); fprintf(fp2,"%lf\n",y1); } fclose(fp1); fclose(fp2); return 0; }

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

    今、学校の課題で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); } } ****************************************** よろしくお願い致します。

  • コマンドラインによるファイル名指定

    #include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) { FILE *fp,*fpc; int i=0; char line[1000]; fp = fopen("test.txt","r"); if(fp == NULL) { printf("File not found.\n"); exit(1);  }  fpc = fopen(argv[1],"w"); if(fpc==NULL){ fprintf(stdout,"Can not open file.\n"); exit(1); } while(fgets(line[i],1000,fp)!=NULL){ i++; } for(i=3;i<0;i--){ fprintf(fpc,"%s",line[i]); } fclose(fp); fclose(fpc); return 0; } コマンドラインでファイル名を指定し、そのファイルに、test.txt(4行の文字列)の内容を各行を逆順に書き出すプログラムですが、上手くいきません。ご指摘を願いします。

  • バイナリファイル(画像)のよみこみ

    レポートで1024×1024ピクセルの画像を、間引いて256×256の画像にしろというのが出されました。画像はrawファイルです。 それで、とりあえず画像を読み込んで、出力するプログラムを書いてみたんですが、コンパイルは出来るのに実行すると不正な処理とけいこくがでてきてしまいます。 ソースは #include<stdio.h> main() { unsigned char in[1024][1024],out[1024][1024]; FILE *fp; int i,j; fp=fopen("aaa.raw","rb"); fread(in,sizeof(unsigned char),1024*1024,fp); fclose(fp); for(i=0;i<1024;i++){ for(j=0;j<1024;j++) out[i][j]=in[i][j]; } fp=fopen("bbb.raw","wb"); fwrite(out,sizeof(unsigned char),1024*1024,fp); fclose(fp); } です。 どこがいけないのかアドバイスいただきたいです。よろしくお願いします。

  • 同時にファイル読み込み 書き込み

    現在、ヒストグラムのプログラムを作成しています。 まず0~255の1000個の乱数ファイルdata.txtを読み込み、 ヒストグラムは出来たのですが、 エクセルでグラフを作りたいので、 data1.txtに書き込みたいので、下のソースでやってみましたが、 0~255のカウントが全部0になってしまします。 fp = fopen("data1.txt","w");が無ければ正常に処理されます。 どうか教えてください。よろしくお願いします。 #include <stdio.h> #define BUF 10 #define MAX 256 void count(FILE *fp , int* counter); int main(void) { FILE *fp; fp = fopen("data.txt","r"); fp = fopen("data1.txt","w"); int counter[MAX]; int i; for(i=0 ; i<MAX ; i++) { counter[i] = 0; } count(fp , counter); for(i=0 ; i<MAX ; i++) { printf("%d %d\n" , i, counter[i]); } fclose(fp); return 0; } void count(FILE* p_file , int* counter) { char buf[BUF]; while (fgets(buf , BUF , p_file) != NULL) { int n; sscanf(buf , "%d" , &n); counter[n]++; } }

  • ファイルへの書き込みについて

    はじめまして、よろしくお願いします。 <質問>C言語を使用したプログラミングで、     下記ソースのように、     ファイルへ書き込むことは可能であればご指摘お願いします。     ※上手に値が渡せていないようで、      実行すると不正な処理?で落ちてしまいます。 <書き込む方法>     1)メインプログラムで書き込むファイルのOPEN     2)サブプログラムで処理を行いファイル書き込み(1)       サブプログラムで処理を行いファイル書き込み(n)     3)メインプログラムで書き込んだファイルをCLOSE <イメージ> #include <stdafx.h> #include <stdio.h> void sub( int i, FILE *fp ); int main(){ FILE *fp; fp = fopen("c:\\0511.txt","w"); int i; for( i = 1; i < 100; i++ ){ sub( i, fp ); } fclose(fp); } void sub( int i, FILE *fp ){ char moji[2]; sprintf(moji,"%3d",i ); fprintf(fp,"%s",moji ); } <補足>VC++2005 ExpressEdition でビルドは出来ました。 お手間おかけしますが、よろしくお願いします。

  • xcodeでのファイル操作について

    xcodeでのファイル操作について いろいろ自分で調べてみたのですが、 xcodeでファイル操作が上手く出来ません。 例えば、 #include <stdio.h> int main () { int x; FILE *fp; fp = fopen("input.txt", "r"); fscanf(fp,"%d", &x); printf("%d",x); fclose(fp); return 0; } というプログラムを書いても、input.txtの内容によらず「0」と出力されます。 つまりinput.txtが開けていないということだと思うのですが、 どうすればちゃんと開けるようになるのでしょうか? 教えて下さい! xcodeのバージョンは3.2.2です。 出来れば、ソースの方ではなく、xcodeの設定をいじってなんとかする方が良いです。

    • ベストアンサー
    • Mac

専門家に質問してみよう