-
大小: 118KB文件類型: .rar金幣: 2下載: 0 次發布日期: 2021-05-05
- 語言: 其他
- 標簽: 封裝??CopyFileEx??同步??異步??
資源簡介
封裝CopyFileExe成為一個類,提供簡單的同步、異步調用文件復制、暫停、恢復、取消復制,自動計算速度和進度,回調給調用者。

代碼片段和文件信息
//?FileCopy.cpp:?implementation?of?the?CFileCopy?class.
//
//////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“FileCopyDemo.h“
#include?“FileCopy.h“
#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif
#include?
#include?
#include?
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
class?CAutoLock??
{??
private:??
????LPCRITICAL_SECTION?m_pcsLcok;??
????
public:??
????CAutoLock(LPCRITICAL_SECTION?pcsLcok)??
????{??
????????m_pcsLcok?=?pcsLcok;??
????????if?(m_pcsLcok)??
????????{??
????????????EnterCriticalSection(m_pcsLcok);??
????????}??
????}??
????
????~CAutoLock()??
????{??
????????if?(m_pcsLcok)??
????????{??
????????????LeaveCriticalSection(m_pcsLcok);??
????????????m_pcsLcok?=?NULL;??
????????}??
????}??
};??
class?CStopwatch
{
public:
CStopwatch()
{
QueryPerformanceFrequency(&m_liPerfFreq);
Start();
}
void?Start()
{
QueryPerformanceCounter(&m_liPerfStart);
}
__int64?Now()?const
{
LARGE_INTEGER?liPerfNow;
QueryPerformanceCounter(&liPerfNow);
return?(liPerfNow.QuadPart?-?m_liPerfStart.QuadPart)?*?1000?/?m_liPerfFreq.QuadPart;
}
__int64?NowInMicro()?const
{
LARGE_INTEGER?liPerfNow;
QueryPerformanceCounter(&liPerfNow);
return?(liPerfNow.QuadPart?-?m_liPerfStart.QuadPart)?*?1000000?/?m_liPerfFreq.QuadPart;
}
private:
LARGE_INTEGER?m_liPerfFreq; //counter?per?second
LARGE_INTEGER?m_liPerfStart; //starting?count
};
CFileCopy::CFileCopy()
{
????m_bCancel?=?FALSE;
????m_dw64TotalFileSize?=?0;
????m_dw64TotalBytesTransferred?=?0;
????m_bIsCoping?=?FALSE;
????m_hPauseEvent?=?NULL;
m_hFeedbackExitEvent?=?NULL;
????m_hAsyncCopyThreadHandle?=?NULL;
m_hFeedbackProgressThreadHandle?=?NULL;
????m_pUserData?=?NULL;
????m_pAsyncCopyResultCB?=?NULL;
m_pCopingProgressCB?=?NULL;
m_dwProgressFeedbackTime?=?0;
????InitializeCriticalSection(&m_csLock);
}
CFileCopy::~CFileCopy()
{
????Cancel();
????DeleteCriticalSection(&m_csLock);
}
BOOL?CFileCopy::CopyFile(IN?LPCTSTR?lpSrcFileName
?????????????????????????IN?LPCTSTR?lpDesFileName
?????????????????????????IN?const?BOOL?bSynchronousCopy
?IN?const?DWORD?dwProgressFeedbackTime
?OUT?DOUBLE?&dbSpeed
?????????????????????????OUT?tstring?&strErrorMsg)
{
????{??
????????CAutoLock?autolock(&m_csLock);??
????????if?(m_bIsCoping)??
????????{??
????????????strErrorMsg?=?_T(“In?coping.“);??
????????????return?FALSE;??
????????}??
????????m_bIsCoping?=?TRUE;??
????}??
????//?同步復制
????if?(bSynchronousCopy)
????{
m_dwProgressFeedbackTime?=?dwProgressFeedbackTime;
????????BOOL?bRet?=?SynchronousCopyFile(
lpSrcFileName?
lpDesFileName?
dwProgressFeedbackTime?
dbSpeed?
st
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????10251??2014-06-16?14:39??FileCopyDemo\FileCopy.cpp
?????文件???????4453??2014-06-16?13:14??FileCopyDemo\FileCopy.h
?????文件???????1779??2014-06-16?10:21??FileCopyDemo\FileCopyDemo.clw
?????文件???????2147??2014-06-12?11:16??FileCopyDemo\FileCopyDemo.cpp
?????文件???????4584??2014-06-16?15:29??FileCopyDemo\FileCopyDemo.dsp
?????文件????????549??2014-06-12?11:16??FileCopyDemo\FileCopyDemo.dsw
?????文件???????1390??2014-06-12?11:16??FileCopyDemo\FileCopyDemo.h
?????文件???????6348??2014-06-16?10:23??FileCopyDemo\FileCopyDemo.rc
?????文件??????11275??2014-06-16?15:28??FileCopyDemo\FileCopyDemoDlg.cpp
?????文件???????1860??2014-06-16?15:28??FileCopyDemo\FileCopyDemoDlg.h
?????文件???????3687??2014-06-12?11:16??FileCopyDemo\ReadMe.txt
?????文件???????1196??2014-06-16?10:23??FileCopyDemo\resource.h
?????文件????????214??2014-06-12?11:16??FileCopyDemo\StdAfx.cpp
?????文件???????1086??2014-06-12?15:17??FileCopyDemo\StdAfx.h
?????文件???????1078??2014-06-12?11:16??FileCopyDemo\res\FileCopyDemo.ico
?????文件????????404??2014-06-12?11:16??FileCopyDemo\res\FileCopyDemo.rc2
?????文件?????139327??2014-06-16?15:28??FileCopyDemo\Debug\FileCopyDemo.exe
?????文件?????517120??2014-06-16?15:28??FileCopyDemo\Debug\FileCopyDemo.pdb
?????目錄??????????0??2014-06-23?10:27??FileCopyDemo\res
?????目錄??????????0??2014-06-23?10:27??FileCopyDemo\Debug
?????目錄??????????0??2014-06-23?10:27??FileCopyDemo
-----------?---------??----------?-----??----
???????????????708748????????????????????21
評論
共有 條評論