c语言文件分割与合并
一.综述
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文件内容:
转载于:https://www.cnblogs.com/huipengbo/p/6883521.html
c语言文件分割与合并相关推荐
- c语言文件分割与合并程序详解,如何实现将一个文件分割成多个小文件
你也许会遇到到这样一个问题?当你有一个较大的软件,而无法用一张软盘将其全部拷下时,你也许会想到该将它分解开,分盘拷回去后,再将它们合并起来.现在的这种分割工具很多,你想自己动手做一个适合自己的分割工具 ...
- Linux文件分割与合并:splitcat(转载)
转自:http://os.51cto.com/art/201104/255359.htm Linux下文件分割可以通过split命令来实现,而用cat进行文件合并.而分割可以指定按行数分割和安大小分割 ...
- 使用python实现大文件分割与合并
在平常的生活中,我们会遇到下面这样的情况: 你下载了一个比较大型的游戏(假设有10G),现在想跟你的同学一起玩,你需要把这个游戏拷贝给他. 然后现在有一个问题是文件太大(我们不考虑你有移动硬盘什么的情 ...
- c#文件分割与合并 part 1 (转自互联网)
这是一篇简单介绍了使用c#来进行文件的合并和分割,我在我的项目中,需要使用到这个模块的功能,所以自己实践之后,发于此,以作备份: 首先,我们先来做文件分割的部分,我们新建了个winform项目,项目设 ...
- 超级文件分割《合并》机(分割大文件)
需求:现在文件的大小越来越大,很多移动设备无法一次把文件一次全部拷贝完全,这种情况就需要把文件分割小点,分几次传送,然后,合并起来,这样就实现了大文件的拷贝功能 介绍:我的这个用的是吧文件分割成1M大 ...
- Linux:split 文件分割和合并
一.简介 Linux服务器普通的文件上传下载一般用 sz rz 就可以满足要求了,但是遇到大文件(超过4G)时就不好使了. 这是就可以通过将大文件分割为小文件传输,之后再进行文件合并即可. 二.用法 ...
- RandomAccessFile实现文件分割、合并
RandomAccessFile可使用的操作模式: "rwd"模式可用于减少执行的"I/O"操作数量.使用"rwd"仅要求更新要写入存储的文 ...
- C#——文件分割与合并
首先,做文件分割的部分,新建了个winform项目,项目设计如下: 这里有如下控件: 一个OpenFileDialog组件,用于选择要分割的大文件. 一个ProgressBar组件,用以显示文件分割的 ...
- 【Python】用Python实现PDF文件分割和合并
有的时候有剪裁PDF的需求,虽然有软件实现了这样的功能,但有时候会遇到这种情况 既然如此,为何不自己实现这个功能呢?上代码 # 导入读写pdf模块 from PyPDF2 import PdfFile ...
- 今天写了一个含配置文件的 文件分割 及 合并 的java程序。
SplitFileDemo(分割)类 package Split;import java.io.File; import java.io.FileInputStream; import java.io ...
最新文章
- Java缓存学习之五:spring 对缓存的支持
- json字符串拼接 json_encode 数组带有花括号{}和中括号[]
- SpringBoot入门篇之properties中定义user.name失效解决
- ASP.NET MVC 实现多文件上传
- 【渝粤题库】陕西师范大学164111 Java及JSP动态网页编程与应用 作业 (高起专)
- vue笔记(一)基本使用、数据检测
- [转载] 湖北:星空团队——海燕计划
- python opencv pdf脚本之家_OpenCV 3和Qt5计算机视觉应用开发 PDF 影印含源码版
- 从职业方向,谈程序员如何突破成长瓶疾,我们该怎么去学习?
- 多线程的那点儿事(之多核编程)
- textbox内容转为字符串_【公告】整改文章内容
- layui的表格可以动态添加行吗_Layui数据表格动态添加行的处理方式(原生HTML方式)...
- Houdini vex用勾股定理推算椭圆运动轨迹
- Python制作个税计算器
- java编程第七周作业
- 两两组合工具之itertools
- Nginx✧虚拟主机资源静态化
- 2021-01-11小米随身wifi网络创建总是失败是什么问题?
- FPGA学习—串口通信
- linux下安装redis和phpredis扩展
热门文章
- html如何添加qq聊天框
- keep be curious
- android最新固件版本,Android获取系统(ROM)类别及版本号
- div四角边框直角、倒角、 圆角、倒圆角
- 编写程序的目的?为什么要学习编程
- w ndows无法完成格式化,windows无法完成格式化怎么办【图文教程】
- Uncaught initialization exception thrown by servlet
- Introduction to Reinforcement Learning notes
- 新人报道,请多多关照。
- 嘉兴 机器人仓库 菜鸟_今天,菜鸟上线中国最大机器人仓库