一.综述

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语言文件分割与合并的更多相关文章

  1. java:快速文件分割及合并

    文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位, ...

  2. (转)java:快速文件分割及合并

    文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位, ...

  3. JAVA IO分析三:IO总结&文件分割与合并实例

    时间飞逝,马上就要到2018年了,今天我们将要学习的是IO流学习的最后一节,即总结回顾前面所学,并学习一个案例用于前面所学的实际操作,下面我们就开始本节的学习: 一.原理与概念 一.概念流:流动 .流 ...

  4. PDF文件分割和合并

    今天自己用C#实现了下PDF文件的分割和合并,大家可以试用一下. 代码和使用说明在这里:https://github.com/cserspring/pdf_split_merge 有什么意见,大家可以 ...

  5. python学习——大文件分割与合并

    在平常的生活中,我们会遇到下面这样的情况: 你下载了一个比较大型的游戏(假设有10G),现在想跟你的同学一起玩,你需要把这个游戏拷贝给他. 然后现在有一个问题是文件太大(我们不考虑你有移动硬盘什么的情 ...

  6. delphi 文件分割与合并

    流的使用分割与合并文件的函数 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...

  7. PHP大文件存储示例,各种文件分割和合并(二进制分割与合并)

    最近要对视频进行上传,由于涉及到的视频非常的大,因此采用的是分片上传的格式,下面是一个简单的例子: split.php <?php $i = 0; //分割的块编号 $fp = fopen(&q ...

  8. Wireshark 文件分割和合并

    # 捕获文件的基本信息. capinfos <filename> 从结果中可以看到 http.pcapng 捕获文件的基本信息,包括文件类型.封装.包大小限制.包数.文件大小及时间等. # ...

  9. Php处理大文件-分割和合并

    分割文件 /* * 分割文件 * 默认大小 2M=10485760/5 */ function file_split($file,$block_size=10485760/5) { $block_in ...

随机推荐

  1. sql 触发器,看完后对CHK有更深的理解

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. 什么是触发器? 触发器对表进行插入.更新.删除 ...

  2. android TransFormexecption 解决

    近期编译的时候遇到这个问题.... > com.android.build.api.transform.Transformexception: java.util.zip.ZipExceptio ...

  3. 详谈Javascript类与继承

    本文将从以下几方面介绍类与继承 类的声明与实例化 如何实现继承 继承的几种方式 类的声明与实例化 类的声明一般有两种方式 //类的声明 var Animal = function () { this. ...

  4. 自己动手写Redis客户端(C#实现)4 - 整数回复

    整数回复 整数回复就是一个以 ":" 开头, CRLF 结尾的字符串表示的整数. 比如说, ":0\r\n" 和 ":1000\r\n" 都 ...

  5. 基于Flink秒级计算时CPU监控图表数据中断问题

     基于Flink进行秒级计算时,发现监控图表中CPU有数据中断现象,通过一段时间的跟踪定位,该问题目前已得到有效解决,以下是解决思路:   一.问题现象       以SQL02为例,发现本来10秒一 ...

  6. Java(概略篇)

    准备 下载并安装Java jdk 和 编辑器(eclipse或Netbeans) 配置环境变量 第一个程序 public class test{ public static void main(Str ...

  7. Web Api 2.0中使用Swagger生成Api文档的2个小Tips

    当Web Api 2.0使用OAuth2授权时,如何在Swagger中添加Authorization请求头? Swagger说明文档支持手动调用Api, 但是当Api使用OAuth2授权时,由于没有地 ...

  8. Core 核心标签库->运算式操作

    jstl--->Core 核心标签库->运算式操作  -->out.remove.set.catch <c:out>:用来显示资料的内容 语法1:没有本体的内容 < ...

  9. 【MySQL疑难杂症】如何将树形结构存储在数据库中(方案一、Adjacency List)

    今天来看看一个比较头疼的问题,如何在数据库中存储树形结构呢? 像mysql这样的关系型数据库,比较适合存储一些类似表格的扁平化数据,但是遇到像树形结构这样有深度的人,就很难驾驭了. 举个栗子:现在有一 ...

  10. CentOS LNMP环境搭建 各版本

    我们先下载系统包. 以下centos6.5 X64系统 进行演示.本环境适应Centos5.x CentOs6.x Centos7.x    32和64版本.如有错误请回复本文主要安装代码汇总 [PH ...