关于文件复制的程序代码

文章作者 100test 发表时间 2007:09:06 12:48:04
来源 100Test.Com百考试题网


  这是一个关于文件拷贝的例程,希望有人可以用上,不用再摸索了。

  #include
  #include


  bool ForceExist.
  const bufsize = 409600. //基本单位为400K

  //---------------------------------------------------------------------------
  void __fastcall TForm1::FormCreate(TObject *Sender)
  {
   Edit1->Text = ExtractFilePath(ParamStr(0)).
  }
  //---------------------------------------------------------------------------
  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
   if (OpenDialog1->Execute())
   {
   AnsiString fFile = OpenDialog1->FileName.
   AnsiString tFile = Edit1->Text ExtractFileName(fFile).
   if (CopyFile(fFile,tFile))
   {
  
   //复制成功....
   }
   else {
   ForceExist = false.
   DeleteFile(tFile).
   }
   }
  }
  //---------------------------------------------------------------------------
  bool TForm1::CopyFile(AnsiString FromFile,AnsiString ToFile)
  {
   bool result(false).
   FILE *FromF,*ToF.
   int NumRead,NumWritten.
   /* BUFSIZ is defined in stdio.h */
   char buf[bufsize].

   Screen->Cursor = crHourGlass.
   ToF = fopen(ToFile.c_str(),"wb").
   FromF = fopen(FromFile.c_str(),"rb").
   try
   {
   StartTime = Now().
   struct stat statbuf.
   /* get information about the file */
   fstat(fileno(FromF), &.statbuf).
   int ModVal = statbuf.st_size % bufsize.
   int MaxVal = statbuf.st_size / bufsize.
   if (ModVal) MaxVal .
   ProgressBar1->Max = MaxVal.
   float fSize = statbuf.st_size.
   TVarRec args[2] = {0,fSize}.
   lblFileSize->Caption = Format("文件大小: %.*n字节", args, 1).
   lblStartTime->Caption = "开始时间: " FormatDateTime("hh:nn:ss",StartTime).

   ForceExist = false.
   ProgressBar1->Position = 0.
   do
   {
   if (ProgressBar1->Position    {
    NumRead = fread(&.buf, sizeof(buf), 1, FromF). // read the data
   NumWritten = fwrite(&.buf, sizeof(buf), 1, ToF). // Write the data
   fSize = bufsize * (ProgressBar1->Position 1).
     }
   else if (ModVal) {//当剩余的数据不足400K时,需作特殊处理...
   char *Smallbuf.
   Smallbuf = (char *)SysGetMem(ModVal).
   NumRead = fread(Smallbuf, ModVal, 1, FromF). // read the data
   NumWritten = fwrite(Smallbuf, ModVal, 1, ToF). // Write the data
   fSize = ModVal.
   SysFreeMem(Smallbuf).
   NumRead = 0.
   }
   ProgressBar1->Position .
   TVarRec args[2] = {0,fSize}.
    lblFileTrans->Caption = Format("已经复制: %.*n字节", args, 1).
   lblElapseTime->Caption = "已用时间: " FormatDateTime("hh:nn:ss",Now()-StartTime).
   Application->ProcessMessages().
   }
  while (!ForceExist &.&. (NumRead!=0 || NumRead==NumWritten)).
   ProgressBar1->Position .
   fclose(ToF).
   fclose(FromF).
   result = !ForceExist.
   }
   catch(...)
   {
   fclose(ToF).
   fclose(FromF).
   MessageDlg("在复制文件时出现错误,未能完成操作。", mtWarning, TMsgDlgButtons() << mbOK, 0).
   }
   Screen->Cursor = crDefault.
   return result.
  }
  //---------------------------------------------------------------------------
  void __fastcall TForm1::BtnStopClick(TObject *Sender)
  {
  if (MessageDlg("正在复制文件,是否要取消操作?", mtWarning, TMsgDlgButtons() << mbYes << mbNo, 0)==mrYes)
   ForceExist = true.
  }
  //---------------------------------------------------------------------------


相关文章


从TColor对象中解析出红、绿、蓝的亮度
个性凸现的动画特技效果
关于文件复制的程序代码
关于捕获VCL没有处理的Windows消息
用C Builder写COM版的Helloworld
类似网络蚂蚁的悬浮窗体
三层架构各层间的访问过程
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛