C语言简单实现文件分块

模块1:分割文件
指定目标输入文件(文件名或文件路径)和分割尺寸,要求分割尺寸(单位:MB)为正整数,且范围在[MIN_SIZE, MAX_SIZE]。
分割后产生块文件,命名格式为“part_”+编号。

模块2:合并文件
指定目标输出文件(文件名或文件路径)。
顺序合并块文件。

#include<stdio.h>
#include<stdlib.h>#define NAME_LENGTH 100
#define BUFFER_SIZE 1024
#define MIN_SIZE 1
#define MAX_SIZE 1024void FileSplit(FILE *file,int size){if(file==NULL){printf("Unable to read file.\n");exit(-1);}if(size<MIN_SIZE || size>MAX_SIZE){printf("The size must be a positive integer(%dMB to %dMB).\n",MIN_SIZE,MAX_SIZE);exit(-3);}char partname[NAME_LENGTH];int buffer[BUFFER_SIZE]; int num=0;while(!feof(file)){sprintf(partname,"part_%d",++num);FILE *fout=fopen(partname,"wb");if(file==NULL){printf("Unable to create file.\n");exit(-2);}for(int i=0;i<size && !feof(file);i++){//read size * 1MBfor(int j=0;j<1024 && !feof(file);j++){//read 1MBint cnt=fread(buffer,1,1024,file);//read 1KB, may less than 1KB.fwrite(buffer,1,cnt,fout);}}fclose(fout);}
}void FileMerge(char *filename){char partname[NAME_LENGTH];int buffer[BUFFER_SIZE]; int num=0;FILE *fin,*fout=fopen(filename,"wb");if(fout==NULL){printf("Unable to create file.\n");exit(-2);} while(sprintf(partname,"part_%d",++num) && (fin=fopen(partname,"rb"))!=NULL){while(!feof(fin)){int cnt=fread(buffer,1,1024,fin);//1KBfwrite(buffer,1,cnt,fout);}fclose(fin);}fclose(fout);
}int main(){printf("Selection function:\n1.FileSplit\n2.FileMarge\n0.quit\n>>");int choose=0;while(scanf("%d",&choose) && choose){while(getchar()!='\n') continue;char filename[NAME_LENGTH];if(choose==1){printf("Please enter the name of the target file>>\n");gets(filename); FILE *fin=fopen(filename,"rb");printf("Please enter the size(MB) of each block>>\n");int size=0;scanf("%d",&size);printf("Wait...\n");FileSplit(fin,size);fclose(fin);printf("Finish.\n");}else if(choose==2){printf("Please enter the name of the output file>>\n");gets(filename); printf("Wait...\n");FileMerge(filename);printf("Finish.\n");}printf("Continue selecting function\n>>");}return 0;
}

建议:检验原文件和合并文件的MD5值是否相同。

C/C++简单实现文件分块相关推荐

  1. 100行代码实现了多线程,批量写入,文件分块的日志方法

    一,您选择用什么样的日志组件 日志组件,不得不提大名鼎鼎的Log4Net.比较常用的还有 Enterprise Library Logging,ServiceStack Logging.当然您还可以补 ...

  2. 基于RxJava2.0+Retrofit2.0超大文件分块(分片)上传(带进度)

    当上传文件过大时,直接上传会增加服务器负载,负载过高会导致机器无法处理其他请求及操作,甚至导致宕机,这时分块上传是最佳选择.本次简单介绍两种分块上传文件方案(暂不考虑文件安全相关问题,如签名): 方案 ...

  3. python中年大叔学编程_中年大叔学编程-Python简单操作文件

    原标题:中年大叔学编程-Python简单操作文件 在计算机中,经常打交道的就是各种文档,用得比较多的软件就是office和记事本来操作文件,那么我们试试用Python来简单读写文件. Open函数的用 ...

  4. 简述php中文件上传过程,简单php文件上传详细说明

    关于文件上传我们讲了很多,这只是一款最基本的简单的文件上传功能,同时本教程也介绍了关于上传的原理以及各种函数的使用与file的参数说明,以及php.ihi设置上传文件大小配置等. 1  如果实现小文件 ...

  5. 使用jspsmartupload完成简单的文件上传系统

    请不要妄想,一个html的file控件,再加上JavaScript与jQuery语句就可以完成文件上传, 文件上传系统从来是需要配合服务器来完成的 用户把自己的文件上传到服务器上 文件上传系统是很复杂 ...

  6. 安卓手机如何打开php文件夹,Android_Android中调用系统的文件浏览器及自制简单的文件浏览器,调用系统自带的文件浏览器- phpStudy...

    Android中调用系统的文件浏览器及自制简单的文件浏览器 调用系统自带的文件浏览器这很简单: /** 调用文件选择软件来选择文件 **/ private void showFileChooser() ...

  7. 怎样用java写一个简单的文件复制程序

    怎样用java写一个简单的文件复制程序 代码来源:https://jingyan.baidu.com/article/c35dbcb0d6f1398916fcbc07.html package Num ...

  8. 简单的文件上传功能实现(java)

    现在很多做后台系统的项目大部分都会用到文件上传这个功能,网上有很多例子,这边是自己用SSM框架技术做的一个简单的文件上传功能. 在写文件上传功能前首先要导入相应的jar包: commons-fileu ...

  9. Qt下简单的文件读取

    此示例只是一个简单的文件的打开,读取,文件内容的加载,望共勉. 界面效果展示 代码实现 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <Q ...

最新文章

  1. 【Spring】基于XML的IOC案例
  2. 小样本学习 few-shot learning
  3. linux将bridge当做hub来用
  4. PHP算法向数组的头插入带键的元素
  5. 您好GroovyFX
  6. NLP 算法工程师的学习、成长和实战经验
  7. python生成个性二维码学习笔记
  8. python一款神器:ptpython 安装
  9. iOS-CoreText的那些事【电子书的那些事】
  10. equals方法的使用几种情况
  11. 死锁的产生原因和解决办法
  12. 使用Cocos creator开发一个文字游戏
  13. 中国游戏企业扬帆出海,应该选择怎样的云平台?
  14. python父亲节快乐_一个“MacBook”新手的Python“笨办法”自学之旅 #第七章:字符串、文本、各种打印、转义序列、手动输入raw_input()...
  15. elasticsearch的服务器响应异常及应对策略
  16. javaScript-模块化开发
  17. 2008年6月it公司红黑榜/口碑榜
  18. 【pandas数据分析】pandas概述
  19. 关于a标签的基本用法和特殊用法
  20. multiboot之ICAP

热门文章

  1. springboot+jspssm中草药商城 供求信息管理系统
  2. 虚拟现实的未来—云VR将是VR发展的最佳选择和必然趋势!
  3. [渝粤教育] 中国地质大学 概率论与数理统计 复习题 (2)
  4. C++ 解决string转为char*中文乱码问题
  5. 维拉智能管家机器人_维拉app下载-维拉(智能机器人)软件下载v2.2.5- 游侠下载站...
  6. spring bean加载原理
  7. CSS文本属性(样式及应用)
  8. 【Zabbix_6.x 第一章】概述、功能、术语、架构
  9. 阿里本地生活端智能架构设计与技术探索
  10. 判断平面上两条直线是否相交