第一次用vc写的文件切割小软件_CutFile

学vc也几个星期了 总想写个小小的东西出来

但却担心自己懂的还太少

刚好带做项目老师给我出了个题目

就是写个能分割文件的小冬冬

 并要我2个星期完成  于是便恨下心开始了 

想不到不到一星期就完成了 哈哈 偷笑一下

其实是个非常非常简单东西

非常非常的没什么技术含量 .`.`.`.`

不过写完后也觉得成才了许多

看来以后要多写写

期间曾多次遇到难点而且csdn询问

在此谢谢在csdn为我解答各位仁兄 使我能顺利完成

 

现把代码一并贴出来 给向我一样的初学者参考参考

此代码没用异常检测 功能代码突出 刚好适合小菜阅读

高手们见笑了

/*=========================================================================================
  名称:CutFile
  作者:幻刃(Lsaint)
  版本:1.0
  功能:★将目标目标文件切割为一系列指定大小的小文件
            ★将切割后的小文件重新组合为源文件
  备注:此代码为突出可读性 为实现异常检测的功能
           也未考虑源文件过大或切割后块数过多的问题   =========================================================================================*/
void CspDlg::OnBnClickedButton1() //切割文件
{
 UpdateData();

 CFile file1(sFile,CFile::modeReadWrite|CFile::shareDenyNone);  // 打开源文件
 CFile file2;


 DWORD fileposition=file1.GetPosition();//文件读写位置
 DWORD fileremaind=file1.GetLength();   //源文件大小

 CString dFilename[21];                 //文件名数组
 CString num;                           //文件号码
 sFile=file1.GetFilePath();             //源路径

 void*  buffer=malloc(pSize);                // 设置 缓存区

 for(int i=0;i<=20;i++)
 {
  num.Format(_T("%d"),i);                  // _T ..  2005默认用UNICODE编码.... 
  dFilename[i]=sFile+num;
 }


 int n=fileremaind/pSize+1;
 for(int j=0;j<n;j++)
 {
  file2.Open(dFilename[j],CFile::modeCreate|CFile::modeWrite|CFile::shareDenyNone,0);
  file1.Seek(fileposition,CFile::begin); 

  if(fileremaind<pSize)  //最后一块文件大小用取余获得
  {pSize=fileremaind%pSize;}

  file1.Read(buffer,pSize);//读
  file2.Write(buffer,pSize);//写

  fileposition=fileposition+pSize;
  fileremaind=fileremaind-pSize;

  file2.Close();

 }

 file1.Close();


 // TODO: 在此添加控件通知处理程序代码
}

void CspDlg::OnBnClickedButton2()//选择要切割的文件
{
 CFileDialog dlg(1,0,0,4|2,0,0,0);
 if(dlg.DoModal()==IDOK)
 {
  sFile=dlg.GetPathName();
  UpdateData(0);
 }

}

void CspDlg::OnBnClickedButton3()// 选择输出文件夹
{
 
 TCHAR pszBuffer[_MAX_PATH];
 BROWSEINFO bi;  LPITEMIDLIST pidl;
 bi.hwndOwner = NULL;
 bi.pidlRoot = NULL;
 bi.pszDisplayName = pszBuffer;
 bi.lpszTitle = _T("选择输出路径");
 bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
 bi.lpfn = NULL;
 bi.lParam = 0;
 if((pidl = SHBrowseForFolder(&bi)) != NULL)
 {
  if(SHGetPathFromIDList(pidl, pszBuffer))
  {
   CString strTemp(pszBuffer);   dFile = strTemp;
   if (dFile.GetLength() <= 1)
   {    
   }
   else if (dFile.Right(1) != _T("//"))  
    dFile += _T("//");
  }
 }

 UpdateData(0);       //显示

 }

void CspDlg::OnBnClickedButton4()  //合并
{
 UpdateData();

 CFile file1;
 CFile file2;//(零)
 
 file1.Open(sFile.Left(sFile.GetLength()-1),CFile::modeReadWrite|CFile::modeCreate);  

                                                                                                            //创建分割前的文件(整)
 CString num;
 CString name;

 for(int i=0;i<20;i++)
 {
   num.Format(_T("%d"),i);  //后缀数字
   name=sFile.Left(sFile.GetLength()-1)+num; //顺序读取文件名
  
 if(file2.Open(name,CFile::modeRead) )    //存在则打开分割后文件
 {
  void*  buffer=malloc(file2.GetLength());//分配缓存               
  file2.Read(buffer,file2.GetLength());   //读取数据  
  file1.Write(buffer,file2.GetLength());  //写入数据

  file2.Close();
 }// End if//
 }// End for//
 file1.Close();  // 关闭文件
}//End Lsaint

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值