读取第一个文件写入第二个文件,读取第二个文件写入第一个文件,实现两个文件内容的交换的操作呢

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

https://ask.csdn.net/questions/7955454/54221454