新手编程训练项目-003——C语言文本合并03:fread与fwrite函数对文本文件的读写

日期:2017年9月4日

任务目标:编写使用fread()和fwrite()函数对文本文件进行读写,并将两文本文件合并的函数

编程环境:Windows 10 Enterprise、Visual Studio 2017 Enterprise、编译字符集Unicode

代码中fread()和fwrite()函数的参数中size_t size 使用的是一个字节,也可使用sizeof(char)。

注意:

  1. 在读取待合并文本长度后,该文本的文本内指针已被移至文本最后,需要使用rewind()函数复位,否则读取内容是就是一堆乱码。

  2. 在使用临时内存buff存储文本内容后,要及时释放内存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
void connect(void)
{
/*################### 打开文件1和2,并建立合并文件"Output_file.txt" ###################*/

FILE *fpa, *fpb, *fpc;
char *file_name_1, *file_name_2; //文件名暂存数组

printf("请输入文件1的相对地址:");
//scanf("%s", file_name_1);
file_name_1 = get_name();
printf("Openning %s\n", file_name_1); //状态标识

if ((fpa = fopen(file_name_1, "r")) == NULL) // 打开输出文件并使fpa指向此文件
{
printf("Open failure...\n"); // 如果打开时出错,就输出"打不开"的信息
exit(0); // 终止程序
}

printf("\n请输入文件2的相对地址:");
//scanf("%s", file_name_2);
file_name_2 = get_name();
printf("Openning %s\n", file_name_2); //状态标识

if ((fpb = fopen(file_name_2, "r")) == NULL) // 打开输出文件并使fpb指向此文件
{
printf("Open failure...\n"); // 如果打开时出错,就输出"打不开"的信息
exit(0); // 终止程序
}


if ((fpc = fopen("Output_file.txt", "w")) == NULL) // 打开输出文件并使fpc指向此文件
{
printf("Open failure...\n"); // 如果打开时出错,就输出"打不开"的信息
exit(0); // 终止程序
}
printf("Building Output_file.txt\n"); //状态标识

/*################### 将文件1和2的内容复制到文件Output_file中 ###################*/
int last_a, last_b; //定义文件大小
char *buff;

fseek(fpa, 0, SEEK_END); //查找第一个文件的大小
last_a = ftell(fpa);
buff = (char*)malloc(sizeof(char)*last_a);
if (NULL == buff)
{
exit(1);
}
rewind(fpa); //将第一个文件指针移到开头(不可忘记)

fread(buff, 1,last_a, fpa); //将第一个文件写入
fwrite(buff, 1,last_a, fpc);

free(buff);

fseek(fpc, 0, SEEK_END); //将合并文件的指针移到最后

fseek(fpb, 0, SEEK_END); //查找第二个文件的大小
last_b = ftell(fpb);
buff = (char*)malloc(sizeof(char)*last_b);
if (NULL == buff)
{
exit(1);
}

rewind(fpb); //将第二个文件指针移到开头
fread(buff, 1, last_b, fpb); //将第二个文件写入
fwrite(buff, 1, last_b, fpc);

free(buff);

/*################### 关闭文件Output_file和文件1、2 ###################*/

fclose(fpc);
fclose(fpb);
fclose(fpa);
}