![]() ![]() |
|
关于文件复制的程序代码 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:39:09 文章录入:杜斌 责任编辑:杜斌 | |
|
|
#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; } //--------------------------------------------------------------------------- |
|
![]() ![]() |