新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 C/C++编程思想 』 → 文件分割器 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 5252 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 文件分割器 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 文件分割器

    文件分割器是个比较实用的工具。当我们要从别的电脑拷贝一个大于一张磁盘容量的文件或图片时就可以体会到它的好处。文件分割器的原理其实很简单,大体是这样:先把想要分割的文件的大小读出来,再用它去除每张磁盘的容量,得出所需的磁盘数,然后就开始读取文件内容,同时建立一个新文件,把读出来的内容存入新文件中,等到新文件的大小等于一张磁盘的容量时就暂停,然后又建立另一个新的文件,继续读取源文件的内容,把这些内容存入刚建立的文件中,如此循环直到分割结束。当然分割后的文件要重新合并才可以使用,所以合并也是必不可少的。合并过程是这样的:把分割的文件依次读出来,并用追加方式写入你所指定的文件中。

      下面是具体的实现过程:

      #include 〈iostream.h〉

      #include 〈fstream.h〉

      #include 〈stdlib.h〉

      int main(int argc,char * argv[])

      {void setfilename(char * dest,char * src,int i);

      char filename[100];

      if(argc==1)

      {cerr〈〈″命令不对″〈〈endl;

      exit(1);}

      if(argc==2)

      //以下为分割文件代码

      {int count=1,disksize=2048*705,disknum;

      fstream f2(argv[1],ios::in¦ios::binary¦ios::nocreate); //打开要分割的文件

      if(f2.fail()) exit(1); //打开失败则退出

      f2.seekg(0,ios::end);

      streampos pos2=f2.tellp();

      f2.seekg(0,ios::beg);

      disknum=pos2/disksize;

      if(!disknum) exit(0);

      //如果文件小于一张磁盘容量则退出

      if(pos2%disksize) disknum=disknum+1;

      for(int b=1;b〈disknum+1;b++)

      {int y;

      setfilename(filename,argv[1],b);

      //调用建立文件名函数

      fstream f1(filename,ios::out¦ios::binary);

      //建立新文件

      do{y=f2.get();

      //从要分割的文件读取数据

      count=count+1;

      f1.write((char *)&y,sizeof(char));}

      //往新文件写数据

      while((y!=EOF)&&(count〈=disksize*b));

      f1.close(); }

      f2.close();}

      else //以下为文件合并代码

      {int x;

      fstream f(argv[1],ios::out¦ios::app¦ios::binary);

      for(int i=2;i〈argc;i++)

      {fstream f1(argv[i],ios::in¦ios::binary¦ios::nocreate);

      if(f1.fail()) exit(1);

      x=f1.get();

      while(x!=EOF)

      {f.write((char *)&x,sizeof(char));

      x=f1.get();}

      f1.close();}

      f.close();}}

      //以下为建立文件名函数

      void setfilename(char*dest,char *src,int i)

      {int x,a=0,b=0;

      bool flag=false;

      for(int i=0;src[i]!=′\0′;i++)

      if (src[i]==′.′) flag=true;

      //判断文件是否含有扩展名

      if(flag)//如有扩展名则按以下代码处理

      {while(src[b]!=′.′)

      {dest[b]=src[b];

      b++;}

      a=b;

      if(i〈=9)

      {x=i+48;

      dest[a]=(char) x;}

      for(int i=0;i〈4;i++)

      {if(src[b]!=′\0′)

      {a=a+1;

      dest[a]=src[b];

      b=b+1;}

      else break;}

      dest[a+1]=′\0′;}

      else{//如没有扩展名则按下面代码处理

      while(src[a]!=′\0′)

      {dest[a]=src[a];

      a=a+1;}

      if(i〈=9)

      {x=i+48;

      dest[a]=char (x);

      dest[a+1]=′\0′;
    }
    }
    }

      由于篇幅的原因,本程序省了很多东西,比如最大只能分割成9个文件及很多的出错处理代码。我只希望本文能起到抛砖引玉的作用,让诸位高手编出更好的程序。此程序只可在命令窗口下使用,分割文件时,输入程序名和要分割的文件名;合并文件时,输入程序名和要合并的目标文件名及需要合并的源文件名。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/10/24 8:55:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/24 21:02:14

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    984.375ms