这是一个关于文件拷贝的例程,希望有人可以用上,不用再摸索了。
#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
类似网络蚂蚁的悬浮窗体
三层架构各层间的访问过程
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛