1、以下代码通过文件映射的方式,进行源文件与目标文件进行对比
/*************************************************************************************
Function Name: CompareFileContentEqual
Input: pszsrc:源路径
psztar:目标路径
Output:
Return: 成功返回TRUE,失败返回FALSE
Desciption: 通过文件映射方式进行文件对比,能大大提高速度,但测试过程发现
映射磁盘超过2G的文件或U盘文件超过800M会报错(内存空间不足,这里应该跟电脑配置有关)
所以通过分段映射对比,每次映射500M文件内容进行比对,直至对比完
需要1G内存,否则可能报内存不足
**************************************************************************************/
BOOL CDeviceOpreationDlg::CompareFileContentEqual(const CString & pszsrc, const CString & psztar)
{
LPCTSTR pSrcContents,pTarContent;
HANDLE hsrcFileMap, htarFileMap;
void *srcBuffer,*tarBuffer;
HANDLE srcHdlr ,tarHdlr;
LARGE_INTEGER lgInteger;
DWORD nSrcFileLength ,nTarFileLength;
srcHdlr = tarHdlr = INVALID_HANDLE_VALUE;
hsrcFileMap = htarFileMap = NULL;
pSrcContents = pTarContent = NULL;
srcBuffer = tarBuffer = NULL;
int err = 0;
int Cnt_500M=0,RemByteLen_500M=0; //500M数量,不足500M的长度
DWORD Length_500M = 500*MB_LENTH*KB_LENTH;
//__try, __finally
//“不管在何种情况下,在离开当前的作用域时,finally块区域内的代码都将会被执行到”
//__finally块被执行的流程时,无外乎三种情况。
//第一种就是顺序执行到__finally块区域内的代码,这种情况很简单,容易理解;
//第二种就是goto语句或return语句引发的程序控制流离开当前__try块作用域时,系统自动完成对__finally块代码的调用;
//第三种就是由于在__try块中出现异常时,导致程序控制流离开当前__try块作用域,这种情况下也是由系统自动完成对__finally块的调用。
_