關於檔案複製的程式程式碼(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MFC檔案複製的函式程式程式碼 (轉)函式
- 關於程式碼複用
- 複製程式碼
- linux中實現檔案的複製(c程式碼實現)LinuxC程式
- C++Builder常用程式碼片斷 (轉)C++UI
- 解決關於Mac不能複製複製檔案到隨身碟的問題Mac
- unix下複製檔案(轉)
- 在WIN95中實現檔案複製的程式設計方法 (轉)程式設計
- python多程式實現檔案海量複製Python
- 最簡單的螢幕複製程式(象素複製) (轉)
- python——幾行程式碼,偷偷複製U盤檔案到電腦Python行程
- 基於配置檔案的redis的主從複製Redis
- 防止網頁被複製的程式碼網頁
- nc複製檔案
- 轉:複製CSDN的BLOG程式碼,去掉前面行號的方法
- Android 複製文字程式碼段Android
- 關於發展報告的相關檔案生成的源程式
- python程式碼製作configure檔案Python
- 用 C++Builder 編寫 Tray 程式 (轉)C++UI
- 複製和貼上的js程式碼 for IE/FireFox/mozilla/ns(轉)JSFirefox
- ubuntu下檔案複製Ubuntu
- 隱藏檔案複製
- 關於拉幕程式的討論和原始碼 (轉)原始碼
- oracle 關於--密碼檔案Oracle密碼
- 關於oracle 密碼檔案Oracle密碼
- 消除複製建構函式和“模板式複製建構函式”中的冗餘程式碼 (轉)函式
- java中建立以一年中日期命名的資料夾,複製檔案 刪除檔案(完整程式碼)Java
- 不要複製別人的程式碼 自己敲出來!
- asm下的控制檔案的複製ASM
- 關於C++複製控制C++
- 關於Oracle 高階複製的概念Oracle
- 關於多維程式的思考 (轉)
- 關於密碼檔案,SYS密碼密碼
- 12c複製 RAC ASM中的密碼檔案到檔案系統ASM密碼
- 關於基於Form的多檔案上載 (轉)ORM
- 【轉】禁止從終端伺服器複製檔案伺服器
- 利用java本地複製檔案及資料夾 (轉)Java
- 使用java程式碼啟動generator生成相關的檔案Java