QQ登录

只需一步,快速开始

189上位机VC MFC实现指定文件的分割与合并

[ 复制链接 ]

189上位机VC MFC实现指定文件的分割与合并

189上位机VC MFC实现指定文件的分割与合并
189上位机VC MFC实现指定文件的分割与合并
功能展示
压缩软件都有将文件按指定大小分割成众多小块的功能,方便存储,我们当前例程也实现指定文件的分割功能,选择要分割的文件,指定每分割文件的大小,就可进行分割合并操作,效果如图;
要点提示
文件的相关操作都可以通过类Cfile实现,例程也通过Cfile类的Read(),Write()实现文件的读取与写入功能;
指定的文件分隔后会通过INI文件保存文件名,文件分割数,文件后缀等信息,在文件合并时些信息进行操作;
实现功能
1.新建基于对话框的应用程序
2.添加四变量private: CStringm_sFilePathName,m_sFileTitle,m_sFileExt,m_sINIPathName;
拖拽一编辑框ID为IDC_EDIT1,及一按钮《选择要分隔的文件》用于实现要分隔文件的指定与显示 ;拖拽一编辑框IDC_EDIT2用于设置分割块的大小;最后分别实现 <执行分割文件><执行合并文件>按钮功能;
  1. void CGkbc8Dlg::OnSeparate()
  2. {
  3.         CFile *readfile,*writefile;
  4.         DWORD filelen,readlen,poslen;
  5.         
  6.         CString sFilePath,sSize,sSepFilePath;
  7.         sFilePath = m_sFilePathName.Left(m_sFilePathName.ReverseFind('\\'));//获得将要分割的文件的全路径
  8.         GetDlgItemText(IDC_EDIT2,sSize);//获得文件分割块的大小
  9.         if(sSize.IsEmpty()||sFilePath.IsEmpty())
  10.                 return;
  11. //><
  12.         DWORD partsize=atoi(sSize)*1024;
  13.         BYTE *b=new BYTE[partsize];
  14.         readfile=new CFile(m_sFilePathName,CFile::modeRead);
  15.         filelen=readfile->GetLength();
  16.         int i=1;
  17.         while(1)//在循环中根据文件的大小和用户设定的大小创建若干文件,并向文件中写入数据
  18.         {
  19.                 ZeroMemory(b,partsize);
  20.                 sSepFilePath.Format("%s\\%spart%d_%s.dat",sFilePath,m_sFileTitle,i,m_sFileExt);
  21.                 //创建文件块
  22.                 HANDLE hfile=::CreateFile(sSepFilePath,GENERIC_WRITE|GENERIC_WRITE,0,0,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0);
  23.                 CloseHandle(hfile);
复制代码
  1. writefile=new CFile(sSepFilePath,CFile::modeWrite);
  2.                 readlen=readfile->Read(b,partsize);
  3.                 poslen=readfile->GetPosition();//获取读取文件当前位置
  4.                 writefile->Write(b,readlen);
  5.                 writefile->Close();
  6.             delete writefile;
  7.                 if(poslen==filelen)break;//已读到文件尾部
  8.                 i++;
  9.         }
  10.         readfile->Close();
  11.         delete b;
  12.         delete readfile;
  13.         

  14.         CString Segments,size;
  15.         m_sINIPathName.Format("%s\\%s.ini",sFilePath,m_sFileTitle);//设置INI文件的路径
  16.         size.Format("%d",filelen);
  17.         Segments.Format("%d",i);
  18.         //将原来文件的信息及分割后的文件数写入到INI文件中
  19.         ::WritePrivateProfileString("FilePartition","FileTitle",m_sFileTitle,m_sINIPathName);
  20.         ::WritePrivateProfileString("FilePartition","FileExt",m_sFileExt,m_sINIPathName);
  21.         ::WritePrivateProfileString("FilePartition","Segments",Segments,m_sINIPathName);
  22.         ::WritePrivateProfileString("FilePartition","FileSize",size,m_sINIPathName);

  23. }
  24. void CGkbc8Dlg::OnChoose()
  25. {
  26.         CFileDialog Dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,NULL);
  27.         if(IDOK == Dlg.DoModal())//点击确认后
  28.         {
  29.                 m_sFilePathName=Dlg.GetPathName();
  30.                 m_sFileTitle=Dlg.GetFileTitle();
  31.                 m_sFileExt = Dlg.GetFileExt();
  32.                 SetDlgItemText(IDC_EDIT1,m_sFilePathName);
  33.         }
  34. }
复制代码
我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:189.上位机VC MFC实现指定文件的分割与合并.rar 
文件大小:138.81 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!








回复

使用道具 举报

快速回复 返回列表 客服中心 搜索