在PC下文件复制程序基于VC6.0

 

  
  
  
  
  1. #include <cstdio>  
  2. #include <cstdlib>  //调用 system()方法的时候要用到  
  3. #include <ctime>  
  4.  
  5. int main(int argc,char* argv[])  
  6. {  
  7.  if(argv[1] && argv[2])             //判断是否在DOC命令下输入目录名  
  8.  {  
  9.     clock_t start,end;  
  10.     start = clock();                //返回处理器调用某个进程或函数所花费的时间  
  11.     
  12.     FILE* fsrc;                     //定义源文件  
  13.     FILE* fdest;                    //定义目标文件  
  14.     fsrc = fopen(argv[1],"rb");     //"r":以只读形式打开一个文本文件。"rb":以只读形式打开一个二进制文件。  
  15.  
  16.     if(!fsrc)                       //如果返回值为NULL,则表明打开文件失败  
  17.     {  
  18.    printf("can't open your src file\n");  
  19.    return 1;  
  20.     }  
  21.      
  22.     fseek(fsrc,0,SEEK_END);        //把fp的文件读写位置指针移到指定的位置.  
  23.     long filesize = ftell(fsrc);   //得到流式文件的当前读写位置,其返回值是当前读写位置偏离文件头部的字节数  
  24.     printf("the src file's size is %d M\n",filesize/(1024*1024));            //注意ftell得到的是字节  
  25.     fseek(fsrc,0,SEEK_SET);        //这个很重要,要把文件指针重新定位到文件开头  
  26.     
  27.     fdest = fopen(argv[2],"ab");   //"ab"追加方式打开一个二进制文件  
  28.      
  29.     if(!fdest)                     //如果返回值为NULL,则表明打开文件失败  
  30.     {  
  31.    printf("can't create your dest file\n");  
  32.    return 1;  
  33.     }  
  34.  
  35.     if(filesize>4096)              //如果4M以上就分次复制  
  36.     {  
  37.    int n = filesize/4096;    // n 块  
  38.    int leavesize = filesize@96;  //剩余部分存储  
  39.  
  40.    char* buf = new char[4096];  
  41.    for(int i=0;i<n;i++)  
  42.    {  
  43.      fread(buf,sizeof(char),4096,fsrc);  
  44.      fwrite(buf,sizeof(char),4096,fdest);  
  45.    }  
  46.    fread(buf,sizeof(char),leavesize,fsrc);  
  47.    fwrite(buf,sizeof(char),leavesize,fdest);  
  48.    
  49.    delete buf;                //释放  
  50.    buf = 0;                   //令buf=null  
  51.     }  
  52.     else                            //否则直接复制  
  53.     {  
  54.    char* buf = new char[filesize];  
  55.    fread(buf,sizeof(char),filesize,fsrc);  
  56.    fwrite(buf,sizeof(char),filesize,fdest);  
  57.    delete buf;  
  58.    buf = 0;  
  59.     }  
  60.     fseek(fdest,0,SEEK_END);        //计算目标文件的大小  
  61.     long filesize2 = ftell(fdest);  
  62.     printf("the dest file's size is %d M\n",filesize2/(1024*1024));  
  63.     fclose(fdest);                  //不要忘记关闭目标文件  
  64.     fclose(fsrc);                   //关闭源文件  
  65.     end = clock();                 
  66.     printf("the duration is %f S\n ",(double)(end - start)/1000);//计算这一个进程用了多少时间。  
  67.    
  68.  }  
  69.  else                         //如果没有参数,就输出提示信息  
  70.  {  
  71.   printf("请您在DOC命令下,输入目录名\n");  
  72.  }  
  73.  system("pause");             //调用系统指令  
  74.  return 0;  
  75. }  
  76.  

 

你可能感兴趣的:(文件复制程序)