📄 mainform.cpp
字号:
//---------------------------------------------------------------------------
//FileName :Mainform.cpp
#include <vcl.h>
#pragma hdrstop
#include "Mainform.h"
#include <stdio.h>
#include <time.h>
#include "sys\stat.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool bExist;
const BufferSize=409600; //基本单位为400K
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if(this->OpenDialog1->Execute())
{
AnsiString StrFileName=this->OpenDialog1->FileName;
this->Edit1->Text=StrFileName;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
if(this->Edit1->Text.Length()<1||this->Edit2->Text.Length()<1)
return;
AnsiString FromFile=this->Edit1->Text;
AnsiString ToFile=this->Edit2->Text;
if (CopyFile(FromFile,ToFile))
{
MessageBox(Handle,"文件复制操作成功","信息提示",MB_OK);
}
else
{
bExist = false;
DeleteFile(ToFile);
}
}
//---------------------------------------------------------------------------
bool TForm1::CopyFile(AnsiString FromFile,AnsiString ToFile)
{
bool result(false);
FILE *pFromFile,*pToFile;
int NumRead,NumWritten;
char buf[BufferSize];
Screen->Cursor = crHourGlass;
pToFile=fopen(ToFile.c_str(),"wb");
pFromFile=fopen(FromFile.c_str(),"rb");
try
{
AnsiString StartTime = Now();
struct stat StatBuffer;
fstat(fileno(pFromFile), &StatBuffer);
int ModVal = StatBuffer.st_size % BufferSize;
int MaxVal = StatBuffer.st_size / BufferSize;
if (ModVal) MaxVal++;
ProgressBar1->Max = MaxVal;
float fSize = StatBuffer.st_size;
TVarRec args[2] = {0,fSize};
this->Label1->Caption = Format("文件大小: %.*n字节 ", args, 1);
this->Label2->Caption = "开始时间: "+FormatDateTime("hh:nn:ss",StartTime)+" ";
bExist = false;
ProgressBar1->Position = 0;
do
{
if (ProgressBar1->Position<MaxVal-1)
{
NumRead = fread(&buf, sizeof(buf), 1, pFromFile); //读文件数据
NumWritten = fwrite(&buf, sizeof(buf), 1, pToFile); //写文件数据
fSize = BufferSize* (ProgressBar1->Position + 1);
}
else if (ModVal) {//当剩余的数据不足400K时,需作特殊处理...
char *Smallbuf;
Smallbuf = (char *)SysGetMem(ModVal);
NumRead = fread(Smallbuf, ModVal, 1, pFromFile); // 读文件数据
NumWritten = fwrite(Smallbuf, ModVal, 1, pToFile); // 写文件数据
fSize += ModVal;
SysFreeMem(Smallbuf);
NumRead = 0;
}
ProgressBar1->Position++;
TVarRec args[2] = {0,fSize};
this->Label3->Caption = Format("已经复制: %.*n字节 ", args, 1);
this->Label4->Caption = "已用时间: "+FormatDateTime("hh:nn:ss",Now()-StartTime)+" ";
Application->ProcessMessages();
}
while (!bExist && (NumRead!=0 || NumRead==NumWritten));
ProgressBar1->Position++;
fclose(pToFile);
fclose(pFromFile);
result = !bExist;
}
catch(...)
{
fclose(pToFile);
fclose(pFromFile);
MessageDlg("在复制文件时出现错误,未能完成操作。", mtWarning, TMsgDlgButtons() << mbOK, 0);
}
Screen->Cursor = crDefault;
return result;
}
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
if (MessageDlg("正在复制文件,是否要取消操作?", mtWarning, TMsgDlgButtons() << mbYes << mbNo, 0)==mrYes)
bExist = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn4Click(TObject *Sender)
{
this->Close();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -