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. hdu 1.3.4 shǎ崽 OrOrOrOrz

    简单的排序,注意输出即可 #include <iostream> #include <algorithm> using namespace std; int main() { ...

  2. 1*1卷积核在GoogleLeNet中的作用

    1. 实现跨通道的交互和信息整合 1×1的卷积层(可能)引起人们的重视是在NIN的结构中,论文中林敏师兄的想法是利用MLP代替传统的线性卷积核,从而提高网络的表达能力.文中同时利用了跨通道poolin ...

  3. 9.翻译:EF基础系列---使用EF开发的方式有哪些?

    原文链接:http://www.entityframeworktutorial.net/choosing-development-approach-with-entity-framework.aspx ...

  4. 23_pikle/shevel/json

    一.序列化       存储数据或者传输数据时,需要把对象进行处理,把对象处理成方便存储和传输的数据格式.不同的序列化,结果也不同.     序列化方式:         (1) pickle 可以将 ...

  5. 怎么把excel表格内的数据导入数据库?

    第一种方法: 思路:想要把excel表格内的数据直接导入数据库不是那么容易,可以把excel表格另存为.csv格式的文档(特点:内容以逗号分割):然后通过一系列的文档操作函数处理成为一个二维数组,然后 ...

  6. Flask 初印象

    Flask 出生于2010年,集中了其他python web框架的长处,定位于微小项目上. 特点 1 内置开发服务器和调试器 2 于Python单元测试功能无缝衔接 Flask框架提供了一个与Pyth ...

  7. df换行问题解决

    df换行问题解决 df是linux下用来查磁盘空间的命令,而在使用了LVM分区或网络挂载的情况下,再用df取分区的使用率时,发现有些分区显示换行了,这样会导致通过脚本取的数据不对. [root@ ]# ...

  8. [POC]K8 DLLhijack Test

    POC: 2016.11 Winrar却持 XP资源管理器却持 DLL却持VS全版本 https://www.cnblogs.com/k8gege/p/10261254.html POC:https: ...

  9. Vim实用技巧系列 - 利用百度云和git实现vim配置多机共享

    Vim是一个强大的文本编辑器.良好的配置更能便利对Vim的使用.有时候,我们会在几台不同的电脑上使用Vim. 例如,我们可能在自己的电脑和公司的电脑上都安装了Vim. 有时候,我们需要实现,如果我们配 ...

  10. vue教程3-02 vue动画

    vue教程3-02 vue动画 以下代码,已经用包管理器下载好vue,animate <!DOCTYPE html> <html lang="en"> &l ...