ファイル処理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
momon

ファイル処理について

#1

投稿記事 by momon » 9年前

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 9年前

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.メモ帳」みたいなものである、ということですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

momon

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

#3

投稿記事 by momon » 9年前

ありがとうございます。
助かりました。
本当は. t x tと書きたかったのですが、フォームが不正と出てしまって消したら行けたのでメモ帳と書かせていただきました。

閉鎖

“C言語何でも質問掲示板” へ戻る