c语言指定大小分割文件,C语言实现智能文件分割
#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语言实现智能文件分割相关推荐
- java切割文件_Java如何将大文件切割成小文件
运用Java编写代码将一个大文件切割成指定大小的小文件 思路: 对已知文件进行切割操作 –> 得到多个碎片文件 使用: 1. 1个字节输入流 –> 读取已知文件中的数据 2. 多个字节输出 ...
- Eagle for Mac怎么创建智能文件夹?mac版eagle创建智能文件夹的图文教程
Eagle 软件的"智能文件夹"功能,可以按名称.标签.颜色等条件自动分类你保存的图片.除此以外,他在提高你工作效率的同时,也可以使你灵感的采集和整理成为了一种愉悦的习惯. 那Ea ...
- C语言:采用交互式方式打开指定的文件,若文件打开成功,则显示该文件的大小,并显示文件内容,若文件打开失败,则提示出错信息
/*采用交互式方式打开指定的文件,若文件打开成功,则显示该文件的大小,并显示文件内容,若文件打开失败,则提示出错信息*/ #include <stdio.h> #include <s ...
- C语言创建指定大小的txt文件
近来需要测试网络的下载速率,自己搭了个服务器,好让客户端可以从服务器下载文件测试下载性能.需要准备些固定大小的文件,例如600k.4M等大小的文件. 思路很简单,C中一个 char类型占 1 byte ...
- Linux下将文件打包、压缩并分割成指定大小
1.普通tar压缩命令 tar -zcvf cm-11.tar.gz cm-11 //将cm-11文件夹压缩成cm-11.tar.gz 2.压缩后的文件太大,需要将cm-11.tar.gz分割成N个指 ...
- java 删除指定文件夹和下面所有文件_JAVA语言基础
一.计算机的基本概念 什么是计算机? 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行.自动高速处理海量数据的现代化智能电子设备.由硬件和软件组成.没有安装过任何软件的计算 ...
- Linux tar命令总结:Linux下对文件进行打包、压缩并分割成指定大小
1.普通tar压缩命令 tar -zcvf andywang.tar.gz andywang //将andywang文件夹压缩成andywang.tar.gz 2.压缩后的文件太大,需要将andywa ...
- c语言打开指定文件,C语言文件的打开和关闭
文件代表一系列的字节.C语言提供了标准库函数用于文件的打开和关闭. 1.文件的打开 打开文件的操作通过标准库函数 fopen 完成,该函数定义如下:FILE *fopen( const char * ...
- linux指定大小分割文件
在很多时候,文件的传递(银行内网外网间发送文件.上传文件)都有可能限制大小,这个时候有一种简单的方法就是按大小分割文件: 比如将以下文件(大小:8M)分割成多个3M大小的文件: MacBook-Pro ...
最新文章
- 使用metablog迁移博客园的文章
- she's the one
- anaconda基本概念,常用命令
- python lol脚本_配台电脑,能玩LOL顶配和能够写一些python脚本能用ps不卡,预算6k到8k?...
- IDEA创建方法时快速添加注释
- cmake (4)多个子目录
- 电脑壁纸知乎_电脑壁纸(个人向
- Android下写一个永远不会被KILL掉的进程/服务
- 用Delphi内联汇编获取机器码
- Python使用datetime模块进行简单的日期换算与计算
- 最近收到邮件美国招聘软件工程师,说明缺人?
- 破局疫后“她经济”,解读艺星整形逆势增长的“3级助推器”
- pyserial库是python语言用于,python的pyserial模块
- 《2019年中国互联网网络安全报告》发布,恶意程序攻击半数来自美国
- java指纹识别+谷歌图片识别技术
- 用css hack解决IE5 IE5.5 IE6 Firefox浏览器兼容性
- A. Harry Klopf是谁?
- 歌评-《胧月夜》-神前暁
- moment 时间类型的转换
- 使用华为光猫ONT使能工具后,本地主机如何通过Telnet登录光猫进行配置
热门文章
- document.body.scrollTop的值为零问题
- JQuery选择器中的属性筛选
- KnowIME: A System to Construct a Knowledge Graph for Intelligent Manufacturing Equipment-学习笔记
- 基本类型数组转包装类型数组工具类
- html 前端分页代码怎么写,前端js写分页
- nginx日志中添加请求的response日志
- 用开源NAC阻止非法网络访问
- MVC Razor模板引擎 @RenderBody、@RenderPage、@RenderSection及Html.RenderPartial、Html.RenderAction...
- Javascript异步编程之一异步原理
- MusicXML 3.0 (6) - 符杠分组