e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 程序开发 >> C Builder教程 >> 关于文件复制的程序代码 >> 教程正文
 
教程搜索
 
 
相关教程
  • Borland C++ Builder 5 企业版使用BDE
  • C++ Builder的几则小应用
  • 使用C++ Builder开发DirectX应用程序
  • 用Pcomm Pro开发串行通信程序
  • 用C++Builder写COM版的Hello world
  • 在BCB中制作模仿超级链接效果
  • 在BCB中实现菜单资源的动态加载
  • 在C++ Builder中使用Access数据库
  • BCB实现MDI程序背景图
  • C++ BUILDER 消息处理的深入探索
  • 用C++ Builder实现VFP数据库开发
  • 用C++ Builder获取应用程序图标
  • C++ Builder 中的图像显示技巧
  • 用C++Builder 5开发Windows下的屏保
  • 如何在 BCB 中旋转并输出文字
  • 关于文件复制的程序代码
 
 

图文教程


  • 将其他Email邮件转移到Gmail邮箱中

  • Vista破解TCP/IP后进不了系统咋办

  • Vista下用DriveSpacio查看磁盘空间

  • Windows抢了谁的饭碗 非主流操作系统To

  • 地球还是火星 平常心看“非主流”
 
 
赞 助 商
 
 
关于文件复制的程序代码
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9

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

#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;

}

//---------------------------------------------------------------------------


  • 上一篇教程: 使用C++ Buider制作自绘画列表框
  • 下一篇教程: 如何在 BCB 中旋转并输出文字
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.