⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.cpp

📁 C++ BUILDER精彩编程实例集锦(源码)2 第三部分 文件操作 第四部分 图像处理
💻 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 + -