關於檔案複製的程式程式碼(C++Builder) (轉)
這是一個關於複製的例程,希望有人可以用上,不用再摸索了。
#include
#include
bool ForceExist;
const bufsize = 409600; //基本單位為400K
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(T *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;
SyreeMem(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;
}
//---------------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991057/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於程式碼複用
- 複製程式碼
- python多程式實現檔案海量複製Python
- 解決關於Mac不能複製複製檔案到隨身碟的問題Mac
- python——幾行程式碼,偷偷複製U盤檔案到電腦Python行程
- 基於配置檔案的redis的主從複製Redis
- 關於發展報告的相關檔案生成的源程式
- 複製檔案githubGithub
- ubuntu下檔案複製Ubuntu
- 12c複製 RAC ASM中的密碼檔案到檔案系統ASM密碼
- Linux檔案的顏色程式碼Linux
- win10系統複製檔案提示0x80004005錯誤程式碼如何修復Win10
- git管理複雜專案程式碼Git
- 小程式複製功能
- Java-IO:複製檔案Java
- Go語言複製檔案Go
- mysql檔案複製遷移MySql
- netcdf檔案複製並修改
- 關於C++複製控制C++
- Atom 微信小程式檔案程式碼高亮微信小程式
- 程式碼安全之上傳檔案
- 程式碼安全之檔案包含
- 可用於解析 Excel 檔案的程式語言Excel
- 關於 Go 程式碼結構的思考Go
- 關於程式碼質量退化的思考
- 程式碼重構:檔案相關變數命名約定變數
- 如何批量複製多個檔案到多個目錄中(批量複製檔案,多對多檔案高效操作的方法)
- 降低程式碼的圈複雜度——複雜程式碼的解決之道複雜度
- Pycharm複製程式碼時括弧前出現空格PyCharm
- git複製一份檔案Git
- [java IO流]之檔案複製Java
- scp命令 用於Linux之間複製檔案和目錄Linux
- 程式碼生成器外掛與Creator預製體檔案解析
- 【轉】[C#] 1行程式碼實現C#複製資料夾功能C#行程
- MATLAB生成.coe檔案和.mif檔案程式碼示例Matlab
- linux複製檔案到另一個資料夾怎麼操作 linux複製檔案的命令介紹Linux
- 基於Matlab Coder將matlab程式碼轉換成c程式碼MatlabC程式
- 用Groovy讀取本地檔案的程式碼
- objective-C 的程式碼檔案組織Object