C++切割文件
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++切割文件的更多相关文章
- JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码
JAVA之旅(三十)--打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码 三十篇了,又是一个 ...
- 使用awk按照行数切割文件
最近在做一个事情,需要将一个文本文件按照行数进行切割,然后用了,awk的方法,感觉很好用, 记录一下. 脚本如下: #!/bin/bash ## 文件效果: 根据行数来切割文件 ## 参数1为要切割的 ...
- Linux split 命令用法详解 - 切割文件[转]
功能说明:切割文件.语 法:split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切 ...
- shell总结:读取文件、参数、if、分割字符串、数组长度、空文件、变量赋值、多进程、按行切割文件、查看线程
Reference: http://saiyaren.iteye.com/blog/1943207 1. Shell 读取文件和写文件 for line in $(<top30000. ...
- linux切割文件【split命令详解】
linux查看帮助 [tomcat-nohup]$ split --help 用法:split [选项]... [输入 [前缀]] 将输入内容拆分为固定大小的分片并输出到"前缀aa" ...
- bash切割文件
split -l 100 ./x01.txt -d -a 3 --additional-suffix=.txt 将 x01.txt文件,-l 100 按照每个100行, -d 以数字累加, -a 3 ...
- 使用hash方法切割文件
如果有大型数据文件(如每行为url或者ip或者单词等的),以G为单位的,处理的时候需先切分.普通切分方法直接根据数据条数切分,得到的每个文件大小相近. 但是有时需要将相同数据放到相同文件中.可以使用h ...
- Linux 下使用 ffmpeg 大批量合并 ts 文件, mp4切割文件为m3u8
见范例 ffmpeg -i "concat:file001.ts|file002.ts|file003.ts|file004.ts......n.ts" -acodec copy ...
- linux 切割文件的命令
Head -1000 access.2016.log >> 10000_access.log
随机推荐
- Android-Java-类与对象的关系
类class 例如:class Student {},很多人把class Student {}称为对象或实体,其实这样并不合理,应该称为描述实体/描述对象: 因为被称为对象或实体的是,new Stud ...
- (leetcode162)find peak element
1题目 A peak element is an element that is greater than its neighbors. Given an input array where num[ ...
- SQL SERVER 索引视图
创建: CREATE VIEW [dbo].[view_xxx] WITH SCHEMABINDING AS SELECT Table1.主键, Table1.外键 FROM Table1, Tabl ...
- C# 开源仪表盘库—Agauge App
1.简介 有个叫A.J.Bauer 的大神在System.Windows.Forms.Control类的基础上建立了一个显示各种仪表盘的类. 英文版简介:C# Tu ...
- WPF 触摸屏小键盘样式
WPF程序,用于平板时,一些输入数量的地方我们需要弹出小键盘输入,这个键盘可以调系统的,也可以自己写. 分享个我现在用的一个数字键盘界面. <Window xmlns:dxe="htt ...
- 3.翻译:EF基础系列--EF怎么工作的?
原文链接:http://www.entityframeworktutorial.net/basics/how-entity-framework-works.aspx 这里,你将会大概了解到EF是怎么工 ...
- 【转载】uwp 获取系统字体库
效果图: 要获取到字体库首先要在 NuGet 添加 SharpDx.Direct2D1 api: /// <summary> /// 获取系统字体库列表 /// </summary ...
- OCP考试062题库出现大量新题-19
choose three Which three statements are true about Oracle Data Pump? A) Oracle Data Pump export and ...
- 装饰者模式&数据库连接池原理
装饰者模式: 我是一个没有感情的杀手 在复习到自建数据库连接池的时候有点蒙了,再次翻看视频整理如下:(装饰者模式下自建数据库连接池修改close功能为 回收连接对象) 自备材料:数据库连接对象的获取的 ...
- jzoj4229
按照題意暴力模擬即可 #include<bits/stdc++.h> using namespace std; int m; typedef long long ll; ll a1,q,n ...