• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

关于文件复制的程序代码(C++Builder)

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 84次 | 进入软件测试论坛讨论

领测软件测试网

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

#include <stdio.h>
#include <sys\stat.h>

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<MaxVal-1)
         {
            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;
}
//---------------------------------------------------------------------------


延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网