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文件内容:

posted on 2017-05-20 23:05 lovejobs 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/huipengbo/p/6883521.html

c语言文件分割与合并相关推荐

  1. c语言文件分割与合并程序详解,如何实现将一个文件分割成多个小文件

    你也许会遇到到这样一个问题?当你有一个较大的软件,而无法用一张软盘将其全部拷下时,你也许会想到该将它分解开,分盘拷回去后,再将它们合并起来.现在的这种分割工具很多,你想自己动手做一个适合自己的分割工具 ...

  2. Linux文件分割与合并:splitcat(转载)

    转自:http://os.51cto.com/art/201104/255359.htm Linux下文件分割可以通过split命令来实现,而用cat进行文件合并.而分割可以指定按行数分割和安大小分割 ...

  3. 使用python实现大文件分割与合并

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

  4. c#文件分割与合并 part 1 (转自互联网)

    这是一篇简单介绍了使用c#来进行文件的合并和分割,我在我的项目中,需要使用到这个模块的功能,所以自己实践之后,发于此,以作备份: 首先,我们先来做文件分割的部分,我们新建了个winform项目,项目设 ...

  5. 超级文件分割《合并》机(分割大文件)

    需求:现在文件的大小越来越大,很多移动设备无法一次把文件一次全部拷贝完全,这种情况就需要把文件分割小点,分几次传送,然后,合并起来,这样就实现了大文件的拷贝功能 介绍:我的这个用的是吧文件分割成1M大 ...

  6. Linux:split 文件分割和合并

    一.简介 Linux服务器普通的文件上传下载一般用 sz rz 就可以满足要求了,但是遇到大文件(超过4G)时就不好使了. 这是就可以通过将大文件分割为小文件传输,之后再进行文件合并即可. 二.用法 ...

  7. RandomAccessFile实现文件分割、合并

    RandomAccessFile可使用的操作模式: "rwd"模式可用于减少执行的"I/O"操作数量.使用"rwd"仅要求更新要写入存储的文 ...

  8. C#——文件分割与合并

    首先,做文件分割的部分,新建了个winform项目,项目设计如下: 这里有如下控件: 一个OpenFileDialog组件,用于选择要分割的大文件. 一个ProgressBar组件,用以显示文件分割的 ...

  9. 【Python】用Python实现PDF文件分割和合并

    有的时候有剪裁PDF的需求,虽然有软件实现了这样的功能,但有时候会遇到这种情况 既然如此,为何不自己实现这个功能呢?上代码 # 导入读写pdf模块 from PyPDF2 import PdfFile ...

  10. 今天写了一个含配置文件的 文件分割 及 合并 的java程序。

    SplitFileDemo(分割)类 package Split;import java.io.File; import java.io.FileInputStream; import java.io ...

最新文章

  1. Java缓存学习之五:spring 对缓存的支持
  2. json字符串拼接 json_encode 数组带有花括号{}和中括号[]
  3. SpringBoot入门篇之properties中定义user.name失效解决
  4. ASP.NET MVC 实现多文件上传
  5. 【渝粤题库】陕西师范大学164111 Java及JSP动态网页编程与应用 作业 (高起专)
  6. vue笔记(一)基本使用、数据检测
  7. [转载] 湖北:星空团队——海燕计划
  8. python opencv pdf脚本之家_OpenCV 3和Qt5计算机视觉应用开发 PDF 影印含源码版
  9. 从职业方向,谈程序员如何突破成长瓶疾,我们该怎么去学习?
  10. 多线程的那点儿事(之多核编程)
  11. textbox内容转为字符串_【公告】整改文章内容
  12. layui的表格可以动态添加行吗_Layui数据表格动态添加行的处理方式(原生HTML方式)...
  13. Houdini vex用勾股定理推算椭圆运动轨迹
  14. Python制作个税计算器
  15. java编程第七周作业
  16. 两两组合工具之itertools
  17. Nginx✧虚拟主机资源静态化
  18. 2021-01-11小米随身wifi网络创建总是失败是什么问题?
  19. FPGA学习—串口通信
  20. linux下安装redis和phpredis扩展

热门文章

  1. html如何添加qq聊天框
  2. keep be curious
  3. android最新固件版本,Android获取系统(ROM)类别及版本号
  4. div四角边框直角、倒角、 圆角、倒圆角
  5. 编写程序的目的?为什么要学习编程
  6. w ndows无法完成格式化,windows无法完成格式化怎么办【图文教程】
  7. Uncaught initialization exception thrown by servlet
  8. Introduction to Reinforcement Learning notes
  9. 新人报道,请多多关照。
  10. 嘉兴 机器人仓库 菜鸟_今天,菜鸟上线中国最大机器人仓库