资源简介
最好的crc32算法,可以直接调用,速度很快
代码片段和文件信息
#include “StdAfx.h“
#include “filecrc.h“
#define MAX_VIEW_SIZE 0x00A00000 //10M
//bool CFileCrc::CheckSum(CMemMapFile &file DWORD &crcContent)
//{
// LPVOID lpData = file.Open();
// DWORD size = file.GetLength();
// bool ret = false;
// if (lpData)
// {
// ret = CheckSum(lpData size crcContent);
// }
// else
// {
// ret = false;
// }
// file.Close();
//
// return ret;
//}
bool CFileCrc::CheckSum(LPSTR pszFileDWORD &crcContent)
{
bool ret = false;
struct ACCUMULATE_CRC
{
bool bFirstCrc;
DWORD crc;
} acCrc = { true 0};;
BYTE* pByte = NULL;
void* dwMemAddress = NULL;
DWORD dwFileSize = 0 dwViewSize = 0;
DWORD dwFileOffset = 0;
HANDLE hFile = CreateFile(pszFile
GENERIC_READ
FILE_SHARE_READ
NULL
OPEN_EXISTING
FILE_ATTRIBUTE_NORMAL
NULL);
if(hFile == INVALID_HANDLE_VALUE){ goto END;}
HANDLE hFilemap = CreateFileMappingA(hFile
NULL
PAGE_READONLY
0
0
NULL);
if(hFilemap == NULL){ goto END;}
dwFileSize = GetFileSize(hFile NULL);
if(dwFileSize == 0) { goto END; }
// Loop while we map a section of the file and CRC it
while(dwFileSize > 0)
{
if(dwFileSize < MAX_VIEW_SIZE) {dwViewSize = dwFileSize; }
else {dwViewSize = MAX_VIEW_SIZE; }
dwMemAddress = MapViewOfFile(hFilemap
FILE_MAP_READ
0
dwFileOffset
dwViewSize);
pByte = (BYTE*)dwMemAddress;
if(pByte == NULL) { goto END; }
if(acCrc.bFirstCrc)
{
acCrc.crc = crc32::checksum(pByte dwViewSize);
acCrc.bFirstCrc = false;
}
else
{
acCrc.crc = crc32::accumulatesum(pByte dwViewSize acCrc.crc);
}
if(!UnmapViewOfFile((void*)dwMemAddress)) { goto END; }
dwFileOffset += dwViewSize;
dwFileSize -= dwViewSize;
}
crcContent = acCrc.crc;
ret = true;
END:
if(hFile != NULL) CloseHandle(hFile);
if(hFilemap != NULL) CloseHandle(hFilemap);
return ret;
}
bool CFileCrc::CheckSum(const void *pBuffer
DWORD len
DWORD &dwResult)
{
assert(pBuffer && len >= 4);
dwResult = crc32::checksum(pBuffer len);
return true;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 991 2006-12-22 11:36 mapfilecrc\.svn\text-ba
目录 0 2006-12-22 11:36 mapfilecrc\.svn\text-ba
目录 0 2006-12-22 11:36 mapfilecrc\.svn\prop-ba
目录 0 2006-12-22 11:36 mapfilecrc\.svn\props
目录 0 2006-12-22 11:36 mapfilecrc\.svn\tmp\text-ba
目录 0 2006-12-22 11:36 mapfilecrc\.svn\tmp\prop-ba
目录 0 2006-12-22 11:36 mapfilecrc\.svn\tmp\props
目录 0 2006-12-22 11:36 mapfilecrc\.svn\tmp
文件 2 2006-12-22 11:36 mapfilecrc\.svn\format
文件 244 2006-12-22 13:19 mapfilecrc\.svn\all-wcprops
文件 400 2006-12-28 09:13 mapfilecrc\.svn\entries
...D.H. 0 2006-12-22 11:36 mapfilecrc\.svn
文件 394 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\text-ba
文件 8454 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\text-ba
文件 3881 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\text-ba
文件 2170 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\text-ba
文件 297 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\text-ba
文件 68 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\text-ba
文件 254 2006-12-22 11:38 mapfilecrc\mapfilecrc\.svn\text-ba
文件 305 2006-12-22 11:48 mapfilecrc\mapfilecrc\.svn\text-ba
目录 0 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\text-ba
目录 0 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\prop-ba
目录 0 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\props
目录 0 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\tmp\text-ba
目录 0 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\tmp\prop-ba
目录 0 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\tmp\props
目录 0 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\tmp
文件 2 2006-12-22 11:36 mapfilecrc\mapfilecrc\.svn\format
文件 1254 2006-12-22 13:19 mapfilecrc\mapfilecrc\.svn\all-wcprops
文件 1245 2006-12-28 09:13 mapfilecrc\mapfilecrc\.svn\entries
............此处省略23个文件信息
评论
共有 条评论