ページ 11

ファイル処理について

Posted: 2016年1月15日(金) 20:24
by momon
2つのファイル名を指定して1つ目の指定したファイルの中身の後に2つ目に指定したファイルの中身を追記させたいのですが、whileのところがうまく行きません。
初歩的なことかもしれませんがお願いします。
ファイルの拡張子はメモ帳を使っています。

コード:

#include<stdio.h>
int main(void)
{
	int i;
	char fnameA[30], fnameB[30];
	FILE *fp;

	printf("ファイル名.1  "); scanf("%s", fnameA);
	printf("ファイル名.2  "); scanf("%s", fnameB);

	fp = fopen(fnameA, "a");
	fp = fopen(fnameB, "r");

	while (fscanf(fp, fnameA) != EOF){
		fprintf(fp, fnameB);
	}

	if (fclose(fp) == EOF){
		printf("\n書き出しエラー\n");
	}
	else{
		printf("\n書き出し完了");
	}
	return 0;
}

Re: ファイル処理について

Posted: 2016年1月15日(金) 20:55
by みけCAT
momon さんが書きました:2つのファイル名を指定して1つ目の指定したファイルの中身の後に2つ目に指定したファイルの中身を追記させたいのですが、whileのところがうまく行きません。
初歩的なことかもしれませんがお願いします。
  • 1個のファイルポインタには1個のファイルしか割り当てることができません。そもそも2個目のfopenの結果をfpに代入した時点で1個目のfopenの戻り値は失われます。
  • fscanfの使い方がおかしいです。
  • 2つ目に指定したファイルの中身を追記させるには、入力されたファイル名ではなく2つ目に指定したファイルの中身をファイル書き込み関数に渡さなければなりません。

コード:

#include<stdio.h>
int main(void)
{
	char fnameA[30], fnameB[30];
	FILE *fpout, *fpin;

	printf("ファイル名.1  "); scanf("%s", fnameA);
	printf("ファイル名.2  "); scanf("%s", fnameB);

	fpout = fopen(fnameA, "a");
	fpin = fopen(fnameB, "r");
	if(fpout == NULL || fpin == NULL){
		if(fpout) fclose(fpout);
		if(fpin) fclose(fpin);
		printf("\nファイルオープン失敗");
		return 1;
	}

	while (fgets(fnameA, sizeof(fnameA), fpin)){
		fputs(fnameA, fpout);
	}

	if (fclose(fpout) == EOF){
		printf("\n書き出しエラー\n");
	}
	else{
		printf("\n書き出し完了");
	}
	fclose(fpin);
	return 0;
}
momon さんが書きました:ファイルの拡張子はメモ帳を使っています。
実際のファイル名は「hoge.メモ帳」みたいなものである、ということですか?

Re: ファイル処理について

Posted: 2016年1月16日(土) 11:00
by momon
ありがとうございます。
助かりました。
本当は. t x tと書きたかったのですが、フォームが不正と出てしまって消したら行けたのでメモ帳と書かせていただきました。