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