C语言交换两个文件必须要用fread读取文件么?如果用fget读取文件,再用scanf输入文件名,交换文件的打开和关闭还需要怎么做?思路比较乱,怎么实现打开了第一个文件,然后紧接着,打开第二个文件,读取第一个文件写入第二个文件,再打开第二个文件,读取第二个文件写入第一个文件,实现两个文件内容的交换的操作呢?为什么总是出错
你可以用fread 和 fwrite 函数,也可以使用 fgetc 和 fputc 函数。这边只做一个案例,用的思想先将第一个文件的内容复制到一个临时文件中,然后再将第二个文件的内容复制到第一个文件中,最后将临时文件的内容复制到第二个文件中。:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_FILENAME_LEN 256
int main() {
char filename1[MAX_FILENAME_LEN];
char filename2[MAX_FILENAME_LEN];
printf("Enter the name of file 1: ");
scanf("%s", filename1);
printf("Enter the name of file 2: ");
scanf("%s", filename2);
FILE* fp1 = fopen(filename1, "r");
if (fp1 == NULL) {
printf("Failed to open file %s.\n", filename1);
return -1;
}
FILE* fp2 = fopen(filename2, "r");
if (fp2 == NULL) {
printf("Failed to open file %s.\n", filename2);
fclose(fp1);
return -1;
}
FILE* temp = fopen("temp", "w");
if (temp == NULL) {
printf("Failed to create temporary file.\n");
fclose(fp1);
fclose(fp2);
return -1;
}
int c;
while ((c = fgetc(fp1)) != EOF) {
fputc(c, temp);
}
fclose(fp1);
fclose(temp);
temp = fopen("temp", "r");
if (temp == NULL) {
printf("Failed to open temporary file.\n");
fclose(fp2);
return -1;
}
fp1 = fopen(filename1, "w");
if (fp1 == NULL) {
printf("Failed to open file %s.\n", filename1);
fclose(fp2);
fclose(temp);
return -1;
}
while ((c = fgetc(fp2)) != EOF) {
fputc(c, fp1);
}
fclose(fp2);
fclose(fp1);
fp2 = fopen(filename2, "w");
if (fp2 == NULL) {
printf("Failed to open file %s.\n", filename2);
fclose(temp);
return -1;
}
while ((c = fgetc(temp)) != EOF) {
fputc(c, fp2);
}
fclose(temp);
fclose(fp2);
remove("temp");
printf("Files %s and %s have been swapped.\n", filename1, filename2);
return 0;
}