一.综述
c语言操作文件通过文件指针FILE*,每个要操作的文件必须打开然后才能读写。
注意事项:
@1分割与合并文件最好使用二进制模式即"rb"或"wb",这样可以操作任何类型文件
@2FILE 指针一定要进行判空操作即看F == NULL成立不
@3文件用完必须关闭,释放系统资源,因为文件会分配缓冲区,占据内存
1.包含头文件
_CRT_SECURE_NO_WARNINGS表示关闭安全检查
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h>
2.编写分割函数
1 /*文件分割,path为要分割的文件路径name为文件名,count为分割数量,savepath为保存路径,返回-1表示分割失败,0表示成功*/ 2 int splitFile(char *path, int count, char *savepath, char *savename) 3 { 4 FILE *F = fopen(path,"rb"); 5 if (F == NULL) 6 { 7 return -1; 8 } 9 else 10 { 11 fseek(F, 0, SEEK_END);//将文件指针移动到文件末尾 12 int length = ftell(F);//计算文件指针到文件开头的字节数,即就是文件大小 13 int yushu = length % count;//余数 14 int size = length / count; //前面count-1份每一分大小为size,最后一份为size + yushu 15 for (int i = 1; i <= count; i++) 16 { 17 char savefile[100]; 18 sprintf(savefile, "%s%d%s", savepath, i, savename); 19 printf("%s", savefile); 20 FILE *P = fopen(savefile, "wb"); 21 if (P == NULL) 22 { 23 fclose(F); 24 return -1; 25 } 26 else 27 { 28 fseek(F, (i - 1)*size, SEEK_SET); 29 if (i == count) 30 { 31 for (int j = 0; j <= size + yushu; j++) 32 { 33 int c = fgetc(F); 34 fputc(c, P); 35 } 36 } 37 else 38 { 39 for (int j = 0; j < size; j++) 40 { 41 int c = fgetc(F); 42 fputc(c, P); 43 } 44 } 45 46 47 } 48 fclose(P); 49 } 50 fclose(F); 51 return 0; 52 }
3.编写合并函数
1 /*合并文件,将文件list中每一行指定的文件按行顺序合并为一个大文件bigfile返回-1表示分割失败,0表示成功*/ 2 int mergeFile(char *list,int count,char *bigfile) 3 { 4 FILE *F = fopen(list, "r"); 5 FILE *BF = fopen(bigfile, "wb"); 6 if (F == NULL || BF == NULL) 7 { 8 printf("打开文件失败"); 9 return -1; 10 } 11 else 12 { 13 14 for (int i = 0; i < count; i++) 15 { 16 char str[200]; 17 fgets(str, 200, F);//每次读取一行字符串,读到末尾为0 18 printf("%s", str); 19 int len = strlen(str); 20 str[len - 1] = '\0'; 21 printf("%s", str); 22 FILE *P = fopen(str, "rb"); 23 if (P == NULL) 24 { 25 printf("打开文件失败"); 26 fclose(F); 27 fclose(BF); 28 return -1; 29 } 30 else 31 { 32 int c = fgetc(P); 33 while (c != EOF) 34 { 35 36 fputc(c, BF); 37 c = fgetc(P); 38 } 39 } 40 fclose(P); 41 42 43 } 44 45 46 47 } 48 fclose(F); 49 fclose(BF); 50 return 0; 51 }
4.主函数测试编写的函数
1 void main() 2 { 3 int i = splitFile("F:\\文件分割与合并.mp4", 4, "F:\\", "文件分割与合并.mp4"); 4 printf("%d", i); 5 mergeFile("F:\\list.txt",4, "F:\\he.mp4"); 6 system("pause"); 7 }
5.测试结果截图
分割结果:产生四个mp4文件,从1文件分割与合并.mp4到4文件分割与合并.mp4
合并结果:
list文件内容:
需要程序源码的可以加我微信x241602私聊。