c语言文件分割与合并
一.综述
c语言操作文件通过文件指针FILE*,每个要操作的文件必须打开然后才能读写。
注意事项:
@1分割与合并文件最好使用二进制模式即"rb"或"wb",这样可以操作任何类型文件
@2FILE 指针一定要进行判空操作即看F == NULL成立不
@3文件用完必须关闭,释放系统资源,因为文件会分配缓冲区,占据内存
1.包含头文件
_CRT_SECURE_NO_WARNINGS表示关闭安全检查
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
2.编写分割函数
/*文件分割,path为要分割的文件路径name为文件名,count为分割数量,savepath为保存路径,返回-1表示分割失败,0表示成功*/
int splitFile(char *path, int count, char *savepath, char *savename)
{
FILE *F = fopen(path,"rb");
if (F == NULL)
{
return -;
}
else
{
fseek(F, , SEEK_END);//将文件指针移动到文件末尾
int length = ftell(F);//计算文件指针到文件开头的字节数,即就是文件大小
int yushu = length % count;//余数
int size = length / count; //前面count-1份每一分大小为size,最后一份为size + yushu
for (int i = ; i <= count; i++)
{
char savefile[];
sprintf(savefile, "%s%d%s", savepath, i, savename);
printf("%s", savefile);
FILE *P = fopen(savefile, "wb");
if (P == NULL)
{
fclose(F);
return -;
}
else
{
fseek(F, (i - )*size, SEEK_SET);
if (i == count)
{
for (int j = ; j <= size + yushu; j++)
{
int c = fgetc(F);
fputc(c, P);
}
}
else
{
for (int j = ; j < size; j++)
{
int c = fgetc(F);
fputc(c, P);
}
} }
fclose(P);
}
fclose(F);
return ;
}
3.编写合并函数
/*合并文件,将文件list中每一行指定的文件按行顺序合并为一个大文件bigfile返回-1表示分割失败,0表示成功*/
int mergeFile(char *list,int count,char *bigfile)
{
FILE *F = fopen(list, "r");
FILE *BF = fopen(bigfile, "wb");
if (F == NULL || BF == NULL)
{
printf("打开文件失败");
return -;
}
else
{ for (int i = ; i < count; i++)
{
char str[];
fgets(str, , F);//每次读取一行字符串,读到末尾为0
printf("%s", str);
int len = strlen(str);
str[len - ] = '\0';
printf("%s", str);
FILE *P = fopen(str, "rb");
if (P == NULL)
{
printf("打开文件失败");
fclose(F);
fclose(BF);
return -;
}
else
{
int c = fgetc(P);
while (c != EOF)
{ fputc(c, BF);
c = fgetc(P);
}
}
fclose(P); } }
fclose(F);
fclose(BF);
return ;
}
4.主函数测试编写的函数
void main()
{
int i = splitFile("F:\\文件分割与合并.mp4", , "F:\\", "文件分割与合并.mp4");
printf("%d", i);
mergeFile("F:\\list.txt",, "F:\\he.mp4");
system("pause");
}
5.测试结果截图
分割结果:产生四个mp4文件,从1文件分割与合并.mp4到4文件分割与合并.mp4

合并结果:

list文件内容:

c语言文件分割与合并的更多相关文章
- java:快速文件分割及合并
文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位, ...
- (转)java:快速文件分割及合并
文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位, ...
- JAVA IO分析三:IO总结&文件分割与合并实例
时间飞逝,马上就要到2018年了,今天我们将要学习的是IO流学习的最后一节,即总结回顾前面所学,并学习一个案例用于前面所学的实际操作,下面我们就开始本节的学习: 一.原理与概念 一.概念流:流动 .流 ...
- PDF文件分割和合并
今天自己用C#实现了下PDF文件的分割和合并,大家可以试用一下. 代码和使用说明在这里:https://github.com/cserspring/pdf_split_merge 有什么意见,大家可以 ...
- python学习——大文件分割与合并
在平常的生活中,我们会遇到下面这样的情况: 你下载了一个比较大型的游戏(假设有10G),现在想跟你的同学一起玩,你需要把这个游戏拷贝给他. 然后现在有一个问题是文件太大(我们不考虑你有移动硬盘什么的情 ...
- delphi 文件分割与合并
流的使用分割与合并文件的函数 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...
- PHP大文件存储示例,各种文件分割和合并(二进制分割与合并)
最近要对视频进行上传,由于涉及到的视频非常的大,因此采用的是分片上传的格式,下面是一个简单的例子: split.php <?php $i = 0; //分割的块编号 $fp = fopen(&q ...
- Wireshark 文件分割和合并
# 捕获文件的基本信息. capinfos <filename> 从结果中可以看到 http.pcapng 捕获文件的基本信息,包括文件类型.封装.包大小限制.包数.文件大小及时间等. # ...
- Php处理大文件-分割和合并
分割文件 /* * 分割文件 * 默认大小 2M=10485760/5 */ function file_split($file,$block_size=10485760/5) { $block_in ...
随机推荐
- webstorm激活破解码+++使用技巧
Webstorm激活破解码 2017-06-15更新 之前都是使用2017.2.27的方法,版本是2017.1.1,还没提示过期,但是根据评论说这个链接已经失效了,评论也给出了个新地址:http:// ...
- ip地址与整数相互转换
一.将ip地址转成long数值 将IP地址转化成整数的方法如下: 1.通过String的split方法按.分隔得到4个长度的数组 2.通过左移位操作(<<)给每一段的数字加权,第一段的权为 ...
- 微信官方团队放出了UI库,看来以后前端还要学WeChatUI了,哈哈
已经在github上发布,网址如下:https://github.com/weui/weui
- Delphi 7中对StretchBlt, StretchDIBits, DrawDibDraw, BitBlt 的性能测试 - 原创
我的天哪,上一篇博文是2年前的事情了.看来又虚度了2年光阴,继续学习... 本文算是副产品,正品是利用FFmpeg从任意视频中生成GIF片段的小程序,等写完了再发.不为别的,只是为了给儿子做动图,且看 ...
- linux安装redis(转)
一.Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多 ...
- 浅谈php的优缺点
一.优点 1. 跨平台,性能优越,跟Linux/Unix结合别跟Windows结合性能强45%,并且和很多免费的平台结合非常省钱,比如LAMP(Linux /Apache/Mysql/PHP)或者FA ...
- 企业级LNMP架构搭建实例(基于Centos6.x)
1.1 部署LNMP架构说明 1.1.1 LNMP架构内容 01.部署linux系统 02.部署nginx网站服务 03.部署mysql数据库服务 04.部署php动态解析服务 1.1.2 配置LNM ...
- Scala入门系列(八):面向对象之trait
基础知识 1 将trait作为接口使用 此时Trait就与Java中的接口非常类似,不过注意,在Scala中无论继承还是trait,统一都是extends关键字. Scala跟Java 8前一样不支持 ...
- indexOf 和 lastIndexOf的区别
indexOf 和 lastIndexOf 是什么? indexOf 和 lastIndexOf 都是索引文件 indexOf 是查某个指定的字符串在字符串首次出现的位置(索引值) (也就是从前往后 ...
- vue.js介绍,常用指令,事件,以及制作简易留言版
一.vue是什么? 一个mvvm框架(库).和angular类似,比较容易上手.小巧,让我们的代码更加专注于业务逻辑,而不是去关注DOM操作 二.vue和angular之间的区别 vue--简单易学 ...