#include

#include

#include "windows.h"

#include

using namespace std;

char* char_catch(char* str)

{

char*

a = "第";

char*  b = "章";

char *i = NULL;

char *temp = NULL;

int n;

int p;

std::vector

myList;

i = str;

while(1)

{

temp =  strstr(i,a);

if (NULL != temp)

{

myList.push_back(temp);

i = temp + 2;

temp = NULL;

}

else

{

break;

}

}

while (!myList.empty())

{

temp = i = myList.back();

BOOL bFlag = FALSE;

for(n=0;n<16;n++)

{

p = strncmp(i,b,2);

if(0 == p)

{

bFlag = TRUE;

break;

}

else

{

i++;

continue;

}

}

if (bFlag == TRUE)

{

return temp;

}

myList.pop_back();

}

return

temp;

}

void rwfile(FILE * iFile, FILE * oFile, int size)

{

char buf[4096] = {0};

int readsize = 0;

while(1)

{

if (size > 4096)

{

readsize =

4096;

}

else

{

readsize =

size;

}

fread(buf, readsize, 1,

iFile);

fwrite(buf, readsize, 1, oFile);

size -= readsize;

if (size == 0)

{

break;

}

}

}

int  domore(FILE * ifp, FILE * ofp, int

FragSize, int cur)

{

char * str = NULL;

char * i = NULL;

int m = 0;

int len = 0;

int lLen = 0;

int readsize = 0;

str = (char*)malloc(FragSize + 1);

if (NULL == str)

{

return 0;

}

lLen = cur + FragSize;

fseek(ifp, lLen,SEEK_SET);

for(m=0; m < 20; m++)

{

readsize = fread(str,1, FragSize,ifp);

str[FragSize] = '\0';

i = char_catch(str);

if(i)

{

len = lLen + i - str - cur;

fseek(ifp, cur,SEEK_SET);

rwfile(ifp, ofp, len);

cur += len;

break;

}

else

{

if (readsize < FragSize)

{

break;

}

lLen += FragSize;

continue;

}

}

return len;

}

void split(char * fileName, long splitSize)

{

FILE *ifp,*ofp;

long FragSize;

long len;

long lLen = 0;

char *Buf = NULL;

char DestFile[1024];

char *i;

char *str = NULL;

int iSize  = 0;

int l = 0;

long cur = 0;

ifp = fopen( fileName,"rb" );

fseek(ifp,0L,SEEK_END);

iSize = ftell(ifp);

rewind(ifp);

FragSize = splitSize

<< 10;

str = (char *)malloc(FragSize + 1);

if(NULL ==  str)

{

printf( "内存分配失败!" );

}

do

{

l = l++;

sprintf(DestFile,"frag%04d",l);

ofp = fopen( DestFile,"wb" );

if ( NULL == ofp )

{

fclose( ifp );

printf( "不能创建分割文件!\n" );

return;

}

if(iSize > FragSize)

{

fseek(ifp, cur, SEEK_SET);

fread(str,FragSize,1,ifp);

str[FragSize] = '\0';

i = char_catch(str);

if(i)

{

len = i - str;

if (0 == len)

{

len = domore(ifp, ofp, FragSize, cur);

if (0 == len)

{

if(iSize > FragSize )

{

fseek(ifp,cur,SEEK_SET);

rwfile(ifp, ofp, FragSize);

iSize -= FragSize;

}

else

{

break;

}

}

}

else

{

fseek(ifp, cur, SEEK_SET);

rwfile(ifp, ofp, len);

}

iSize -= len;

cur +=

len;

}

else

{

len = domore(ifp, ofp,  FragSize, cur);

if (0 == len)

{

if(iSize > FragSize )

{

fseek(ifp,cur,SEEK_SET);

rwfile(ifp, ofp, FragSize);

iSize -= FragSize;

}

else

{

break;

}

}

iSize -= len;

cur += len;

}

}

else

{

FragSize = iSize;

rwfile(ifp, ofp, FragSize);

iSize = 0;

}

}

while(iSize > 0);

free(str);

fclose(ifp);

}

int main(int arg, char * arv[])

{

long

splitSize = 0;

printf( "按KB分割文件: " );

scanf( "%D", &splitSize

);

split("f.txt",splitSize);

return 0;

}

c语言指定大小分割文件,C语言实现智能文件分割相关推荐

  1. java切割文件_Java如何将大文件切割成小文件

    运用Java编写代码将一个大文件切割成指定大小的小文件 思路: 对已知文件进行切割操作 –> 得到多个碎片文件 使用: 1. 1个字节输入流 –> 读取已知文件中的数据 2. 多个字节输出 ...

  2. Eagle for Mac怎么创建智能文件夹?mac版eagle创建智能文件夹的图文教程

    Eagle 软件的"智能文件夹"功能,可以按名称.标签.颜色等条件自动分类你保存的图片.除此以外,他在提高你工作效率的同时,也可以使你灵感的采集和整理成为了一种愉悦的习惯. 那Ea ...

  3. C语言:采用交互式方式打开指定的文件,若文件打开成功,则显示该文件的大小,并显示文件内容,若文件打开失败,则提示出错信息

    /*采用交互式方式打开指定的文件,若文件打开成功,则显示该文件的大小,并显示文件内容,若文件打开失败,则提示出错信息*/ #include <stdio.h> #include <s ...

  4. C语言创建指定大小的txt文件

    近来需要测试网络的下载速率,自己搭了个服务器,好让客户端可以从服务器下载文件测试下载性能.需要准备些固定大小的文件,例如600k.4M等大小的文件. 思路很简单,C中一个 char类型占 1 byte ...

  5. Linux下将文件打包、压缩并分割成指定大小

    1.普通tar压缩命令 tar -zcvf cm-11.tar.gz cm-11 //将cm-11文件夹压缩成cm-11.tar.gz 2.压缩后的文件太大,需要将cm-11.tar.gz分割成N个指 ...

  6. java 删除指定文件夹和下面所有文件_JAVA语言基础

    一.计算机的基本概念 什么是计算机? 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行.自动高速处理海量数据的现代化智能电子设备.由硬件和软件组成.没有安装过任何软件的计算 ...

  7. Linux tar命令总结:Linux下对文件进行打包、压缩并分割成指定大小

    1.普通tar压缩命令 tar -zcvf andywang.tar.gz andywang //将andywang文件夹压缩成andywang.tar.gz 2.压缩后的文件太大,需要将andywa ...

  8. c语言打开指定文件,C语言文件的打开和关闭

    文件代表一系列的字节.C语言提供了标准库函数用于文件的打开和关闭. 1.文件的打开 打开文件的操作通过标准库函数 fopen 完成,该函数定义如下:FILE *fopen( const char * ...

  9. linux指定大小分割文件

    在很多时候,文件的传递(银行内网外网间发送文件.上传文件)都有可能限制大小,这个时候有一种简单的方法就是按大小分割文件: 比如将以下文件(大小:8M)分割成多个3M大小的文件: MacBook-Pro ...

最新文章

  1. 使用metablog迁移博客园的文章
  2. she's the one
  3. anaconda基本概念,常用命令
  4. python lol脚本_配台电脑,能玩LOL顶配和能够写一些python脚本能用ps不卡,预算6k到8k?...
  5. IDEA创建方法时快速添加注释
  6. cmake (4)多个子目录
  7. 电脑壁纸知乎_电脑壁纸(个人向
  8. Android下写一个永远不会被KILL掉的进程/服务
  9. 用Delphi内联汇编获取机器码
  10. Python使用datetime模块进行简单的日期换算与计算
  11. 最近收到邮件美国招聘软件工程师,说明缺人?
  12. 破局疫后“她经济”,解读艺星整形逆势增长的“3级助推器”
  13. pyserial库是python语言用于,python的pyserial模块
  14. 《2019年中国互联网网络安全报告》发布,恶意程序攻击半数来自美国
  15. java指纹识别+谷歌图片识别技术
  16. 用css hack解决IE5 IE5.5 IE6 Firefox浏览器兼容性
  17. A. Harry Klopf是谁?
  18. 歌评-《胧月夜》-神前暁
  19. moment 时间类型的转换
  20. 使用华为光猫ONT使能工具后,本地主机如何通过Telnet登录光猫进行配置

热门文章

  1. document.body.scrollTop的值为零问题
  2. JQuery选择器中的属性筛选
  3. KnowIME: A System to Construct a Knowledge Graph for Intelligent Manufacturing Equipment-学习笔记
  4. 基本类型数组转包装类型数组工具类
  5. html 前端分页代码怎么写,前端js写分页
  6. nginx日志中添加请求的response日志
  7. 用开源NAC阻止非法网络访问
  8. MVC Razor模板引擎 @RenderBody、@RenderPage、@RenderSection及Html.RenderPartial、Html.RenderAction...
  9. Javascript异步编程之一异步原理
  10. MusicXML 3.0 (6) - 符杠分组