C语言读取第一个文件和第二个文件之后,然后打开第二个文件和第一个文件,写入第一个文件和第二个文件,用这个思想怎么实现文件的交换呢

C语言读取第一个文件和第二个文件之后,关闭2个文件,然后打开第二个文件和第一个文件,写入第一个文件和第二个文件,用这个思想怎么实现文件的交换呢?文件的打开和关闭避免出错的办法


#include <stdio.h>
#include <stdlib.h>

int main() {
    char file1[] = "file1.txt";
    char file2[] = "file2.txt";

    // 读取数据
    FILE* fp1 = fopen(file1, "r");
    if (fp1 == NULL) {
        printf("Failed to open file %s.\n", file1);
        return -1;
    }

    char* data1 = (char*)malloc(1024);
    int size1 = fread(data1, 1, 1024, fp1);
    fclose(fp1);

    //读数据
    FILE* fp2 = fopen(file2, "r");
    if (fp2 == NULL) {
        printf("Failed to open file %s.\n", file2);
        return -1;
    }

    char* data2 = (char*)malloc(1024);
    int size2 = fread(data2, 1, 1024, fp2);
    fclose(fp2);

    // 交换数据
    fp1 = fopen(file1, "w");
    if (fp1 == NULL) {
        printf("Failed to open file %s.\n", file1);
        return -1;
    }

    fwrite(data2, 1, size2, fp1);
    fclose(fp1);

    fp2 = fopen(file2, "w");
    if (fp2 == NULL) {
        printf("Failed to open file %s.\n", file2);
        return -1;
    }

    fwrite(data1, 1, size1, fp2);
    fclose(fp2);

    free(data1);
    free(data2);

    return 0;
}

要在C语言中交换两个文件的内容,可以参考以下步骤:

首先,你需要四个文件指针,两个用于读取两个文件,两个用于写入两个文件。并且需要注意文件操作可能出错的情况,如文件不存在或文件无法打开等。以下是相应的代码:

#include <stdio.h>
#include <stdlib.h>

void swapFiles(char *file1, char *file2){
    FILE *fp1r, *fp2r, *fp1w, *fp2w;
    char *buffer1, *buffer2;
    long size1, size2;

    // Step 1: 打开文件进行读取
    fp1r = fopen(file1, "rb");
    if(fp1r == NULL){
        printf("无法打开文件 %s \n", file1);
        exit(1);
    }
    fp2r = fopen(file2, "rb");
    if(fp2r == NULL){
        printf("无法打开文件 %s \n", file2);
        exit(1);
    }

    // Step 2: 获取文件大小
    fseek(fp1r, 0, SEEK_END);
    size1 = ftell(fp1r);
    fseek(fp1r, 0, SEEK_SET);
    fseek(fp2r, 0, SEEK_END);
    size2 = ftell(fp2r);
    fseek(fp2r, 0, SEEK_SET);

    // Step 3: 读取文件内容
    buffer1 = malloc(size1);
    buffer2 = malloc(size2);
    fread(buffer1, 1, size1, fp1r);
    fread(buffer2, 1, size2, fp2r);

    // Step 4: 关闭读取文件
    fclose(fp1r);
    fclose(fp2r);

    // Step 5: 打开文件进行写入
    fp1w = fopen(file1, "wb");
    if(fp1w == NULL){
        printf("无法打开文件 %s \n", file1);
        exit(1);
    }
    fp2w = fopen(file2, "wb");
    if(fp2w == NULL){
        printf("无法打开文件 %s \n", file2);
        exit(1);
    }

    // Step 6: 交换写入文件内容
    fwrite(buffer2, 1, size2, fp1w);
    fwrite(buffer1, 1, size1, fp2w);

    // Step 7: 关闭写入文件
    fclose(fp1w);
    fclose(fp2w);

    // Step 8: 释放缓存
    free(buffer1);
    free(buffer2);
}

int main(){
    swapFiles("file1.txt", "file2.txt");
    return 0;
}

这段代码首先打开两个文件进行读取,然后获取每个文件的大小,并将内容读入两个不同的缓冲区中。然后,它关闭两个读取文件,打开两个写入文件,并将缓冲区中的内容交换写入这两个文件。最后,它关闭两个写入文件,并释放用于读取文件的缓冲区。

https://ask.csdn.net/questions/7959622/54229541