void CFileCutter::DoSplit()
{
int nCompleted = ; //计数
CString strSourceFile = m_strSource; //取得全局变量赋值给局部变量,方便操作
CString strDestDir = m_strDest;
CFile sourceFile, destFile;
//打开文件
BOOL bOK = sourceFile.Open(strSourceFile, CFile::modeRead | CFile::shareDenyWrite | CFile::typeBinary);
if (!bOK)//打不开就报错退出
{
::PostMessage(m_hWndNotify, WM_CUTTERSTOP, exitSourceErr, nCompleted);
return;
}
int nPos = ;
//逐层创建文件夹(不存在就创建)
while ((nPos = strDestDir.Find('\\', nPos + )) != -)//少了个括号
{
::CreateDirectory(strDestDir.Left(nPos),NULL);
}
::CreateDirectory(strDestDir, NULL); //创建最底层文件夹
if (strDestDir.Right() != '\\')
{
strDestDir += '\\';
}
int nTotalFiles = sourceFile.GetLength() / m_uFileSize + ;//判断切割后文件数
::PostMessage(m_hWndNotify,WM_CUTTERSTART,nTotalFiles,TRUE); //设置进度条长度
const int c_page = * ; //每次读取大小
char buff[c_page]; //缓冲区
DWORD dwRead; CString sDestName;
int nPreCount = ;
UINT uWriteBytes; do
{
//设置文件名并创建文件
sDestName.Format(TEXT("%d_"), nPreCount);
sDestName += sourceFile.GetFileName();
if (!destFile.Open(strDestDir + sDestName, CFile::modeWrite | CFile::modeCreate))
{
PostMessage(m_hWndNotify, WM_CUTTERSTOP, exitDestErr, nCompleted);
sourceFile.Close();
return;
}
uWriteBytes = ;
do
{
//读写操作
if (!m_bContinue) //stopCutter函数
{
destFile.Close();
sourceFile.Close();
if (!m_bExitThread) //析构函数
{
::PostMessage(m_hWndNotify, WM_CUTTERSTOP, exitUserForce, nCompleted);
}
return;
}
dwRead = sourceFile.Read(buff, c_page);//读
destFile.Write(buff, dwRead); //写
uWriteBytes += dwRead; //计数 } while (dwRead > && uWriteBytes < m_uFileSize);//读出了数据并且一共写的数据量小于用户要求的数据量
destFile.Close(); //当前文件写完了,关闭
nCompleted = nPreCount++; //计数
::PostMessage(m_hWndNotify, WM_CUTTERSTATUS, , nCompleted); } while (dwRead > ); //只要读出了数据就循环继续,直到源文件全部读出。
sourceFile.Close(); //最后关闭原文件
::PostMessage(m_hWndNotify, WM_CUTTERSTOP, exitSuccess, nCompleted);
}

C++切割文件的更多相关文章

  1. JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码

    JAVA之旅(三十)--打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码 三十篇了,又是一个 ...

  2. 使用awk按照行数切割文件

    最近在做一个事情,需要将一个文本文件按照行数进行切割,然后用了,awk的方法,感觉很好用, 记录一下. 脚本如下: #!/bin/bash ## 文件效果: 根据行数来切割文件 ## 参数1为要切割的 ...

  3. Linux split 命令用法详解 - 切割文件[转]

    功能说明:切割文件.语 法:split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切 ...

  4. shell总结:读取文件、参数、if、分割字符串、数组长度、空文件、变量赋值、多进程、按行切割文件、查看线程

    Reference: http://saiyaren.iteye.com/blog/1943207 1.     Shell  读取文件和写文件 for line in $(<top30000. ...

  5. linux切割文件【split命令详解】

    linux查看帮助 [tomcat-nohup]$ split --help 用法:split [选项]... [输入 [前缀]] 将输入内容拆分为固定大小的分片并输出到"前缀aa" ...

  6. bash切割文件

    split -l 100 ./x01.txt -d -a 3 --additional-suffix=.txt 将 x01.txt文件,-l 100 按照每个100行,  -d 以数字累加, -a 3 ...

  7. 使用hash方法切割文件

    如果有大型数据文件(如每行为url或者ip或者单词等的),以G为单位的,处理的时候需先切分.普通切分方法直接根据数据条数切分,得到的每个文件大小相近. 但是有时需要将相同数据放到相同文件中.可以使用h ...

  8. Linux 下使用 ffmpeg 大批量合并 ts 文件, mp4切割文件为m3u8

    见范例 ffmpeg -i "concat:file001.ts|file002.ts|file003.ts|file004.ts......n.ts" -acodec copy ...

  9. linux 切割文件的命令

    Head -1000 access.2016.log >> 10000_access.log

随机推荐

  1. NET 获取实例所表示的日期是星期几

    获取日期枚举,可以根据switch去进行操作 DateTime.Now.DayOfWeek

  2. 【转】C#模拟http 发送post或get请求

    原文地址:http://www.cnblogs.com/xssxss/archive/2012/07/03/2574554.html 模拟POST Json public static string ...

  3. Spring IOC 容器源码分析 - 创建原始 bean 对象

    1. 简介 本篇文章是上一篇文章(创建单例 bean 的过程)的延续.在上一篇文章中,我们从战略层面上领略了doCreateBean方法的全过程.本篇文章,我们就从战术的层面上,详细分析doCreat ...

  4. Python-WSGI协议如何实现?

    简述浏览器通过WSGI 请求动态资源的过程? 发送 http 请求动态资源给 web 服务器 web 服务器收到请求后通过 WSGI 调用一个属性给应用程序框架 应用程序框架通过引用 WSGI 调用 ...

  5. CentOS 安装Weblogic并配置 domain

    CentOS 安装Weblogic并配置 domain 1.创建用户组 [root@localhost weblogic]# groupadd weblogic 2.创建 tmn 用户 [root@l ...

  6. 03-创建高可用 etcd 集群

    本文档记录自己的学习历程! 创建高可用 etcd 集群 kuberntes 系统使用 etcd 存储所有数据,本文档介绍部署一个三节点高可用 etcd 集群的步骤,这三个节点使用以下机器: 192.1 ...

  7. Docker三剑客之常用命令

    一.docker-machine 命令 说明 docker-machine create 创建一个 Docker 主机(常用-d virtualbox) docker-machine ls 查看所有的 ...

  8. Flask 微博三方登录

    1.进入微博开发平台(https://open.weibo.com/),注册账号,填写开发者信息 2.创建应用.创建应用完成后,可以在"我的应用 - 应用信息"中查看您所创建应用的 ...

  9. (转)详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数

    原文:https://www.jb51.net/article/138363.htm hasattr()函数 hasattr()函数用于判断是否包含对应的属性 语法: hasattr(object,n ...

  10. mac 查询端口被哪个进程占用

    1,查看端口被哪个程序占用sudo lsof -i tcp:port如: sudo lsof -i tcp:80802,看到进程的PID,可以将进程杀死.sudo kill -9 PID如:sudo ...