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 ...
随机推荐
- Java日志框架那些事儿
文章首发于[博客园-陈树义],点击跳转到原文Java日志框架那些事儿. 在项目开发过程中,我们可以通过 debug 查找问题.而在线上环境我们查找问题只能通过打印日志的方式查找问题.因此对于一个项目而 ...
- head first python菜鸟学习笔记(第三章)
1.os.chdir()切换到指定目录下,os.getcwd(),得到当前目录. >>> import os>>> os.chdir('D:\\CodeDocume ...
- 《Maven实战》 第7章 生命周期与插件
7.1什么是生命周期 软件开发人员每天都在对项目进行清理.编译.测试及部署,Maven生命周期是对所有构建过程进行抽象和统一,含项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几 ...
- JavaScript提高篇之预解释作用域以及this原理及其应用
1.预解释 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- Linux系统bash shell之历史命令
1.相关变量: HISTSIZE: 定义命令历史记录的条数 HISTFILE: 定义命令储存的文件,一般是 ~/.bash_history HISTFILESIZE: 定义了历史文件记录历史的条数 H ...
- 应用教程之帕克西AR虚拟试妆3D动态美妆
帕克西技术团队通过对美妆行业深度调研,凭借自主研发的人脸识别与面部追踪等技术,打造的超现实AR虚拟试妆应用已成功上线,内置万千妆容,包含口红.眉毛.睫毛等,一点即可试妆,就像照镜子一样简单. 那么,帕 ...
- java桌面程序打包教程
首先打包成j可执行的jar文件. . 接下来找到自己生成jar文件的路径就可以看到jar文件了,我的是在桌面: 在桌面新建一个文件夹(名字随便取,一般去项目名字) 上面是我取的文件夹名字,然后把资料文 ...
- day1-Python入门
百度云有关文档资料链接 链接:https://pan.baidu.com/s/1pLighnX 密码:j69s
- select联动遇到的问题
今天写了个select下拉联动,记录下过程中遇到的问题. dom部分 // 拿到选中项的索引 myselect.selectedIndex // 拿到选中项的text/value myselect.o ...
- Android官方命令深入分析之AVD Manager
作者:宋志辉 AVD Manager提供了一个图形用户接口,通过它你能够创建和管理AVDs. 你能够通过下面方式执行AVD Manager: Eclipse:选择 Window > Androi ...