工控编程吧
标题:
189上位机VC MFC实现指定文件的分割与合并
[打印本页]
作者:
qq263946146
时间:
2016-1-29 21:16
标题:
189上位机VC MFC实现指定文件的分割与合并
(, 下载次数: 2)
上传
点击文件名下载附件
189上位机VC MFC实现指定文件的分割与合并
功能展示
压缩软件都有将文件按指定大小分割成众多小块的功能,方便存储,我们当前例程也实现指定文件的分割功能,选择要分割的文件,指定每分割文件的大小,就可进行分割合并操作,效果如图;
要点提示
文件的相关操作都可以通过类Cfile实现,例程也通过Cfile类的Read(),Write()实现文件的读取与写入功能;
指定的文件分隔后会通过INI文件保存文件名,文件分割数,文件后缀等信息,在文件合并时些信息进行操作;
实现功能
1.新建基于对话框的应用程序
2.添加四变量private: CStringm_sFilePathName,m_sFileTitle,m_sFileExt,m_sINIPathName;
拖拽一编辑框ID为IDC_EDIT1,及一按钮《选择要分隔的文件》用于实现要分隔文件的指定与显示 ;拖拽一编辑框IDC_EDIT2用于设置分割块的大小;最后分别实现 <执行分割文件><执行合并文件>按钮功能;
void CGkbc8Dlg::OnSeparate()
{
CFile *readfile,*writefile;
DWORD filelen,readlen,poslen;
CString sFilePath,sSize,sSepFilePath;
sFilePath = m_sFilePathName.Left(m_sFilePathName.ReverseFind('\\'));//获得将要分割的文件的全路径
GetDlgItemText(IDC_EDIT2,sSize);//获得文件分割块的大小
if(sSize.IsEmpty()||sFilePath.IsEmpty())
return;
//><
DWORD partsize=atoi(sSize)*1024;
BYTE *b=new BYTE[partsize];
readfile=new CFile(m_sFilePathName,CFile::modeRead);
filelen=readfile->GetLength();
int i=1;
while(1)//在循环中根据文件的大小和用户设定的大小创建若干文件,并向文件中写入数据
{
ZeroMemory(b,partsize);
sSepFilePath.Format("%s\\%spart%d_%s.dat",sFilePath,m_sFileTitle,i,m_sFileExt);
//创建文件块
HANDLE hfile=::CreateFile(sSepFilePath,GENERIC_WRITE|GENERIC_WRITE,0,0,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0);
CloseHandle(hfile);
复制代码
writefile=new CFile(sSepFilePath,CFile::modeWrite);
readlen=readfile->Read(b,partsize);
poslen=readfile->GetPosition();//获取读取文件当前位置
writefile->Write(b,readlen);
writefile->Close();
delete writefile;
if(poslen==filelen)break;//已读到文件尾部
i++;
}
readfile->Close();
delete b;
delete readfile;
CString Segments,size;
m_sINIPathName.Format("%s\\%s.ini",sFilePath,m_sFileTitle);//设置INI文件的路径
size.Format("%d",filelen);
Segments.Format("%d",i);
//将原来文件的信息及分割后的文件数写入到INI文件中
::WritePrivateProfileString("FilePartition","FileTitle",m_sFileTitle,m_sINIPathName);
::WritePrivateProfileString("FilePartition","FileExt",m_sFileExt,m_sINIPathName);
::WritePrivateProfileString("FilePartition","Segments",Segments,m_sINIPathName);
::WritePrivateProfileString("FilePartition","FileSize",size,m_sINIPathName);
}
void CGkbc8Dlg::OnChoose()
{
CFileDialog Dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,NULL);
if(IDOK == Dlg.DoModal())//点击确认后
{
m_sFilePathName=Dlg.GetPathName();
m_sFileTitle=Dlg.GetFileTitle();
m_sFileExt = Dlg.GetFileExt();
SetDlgItemText(IDC_EDIT1,m_sFilePathName);
}
}
复制代码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/dee891044c64ae2c64459bd748030446/0/0/w_19rtbd2rel.swf-albumId=5268547409-tvId=5268547409-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4