HANDLE hFile = CreateFile(filename,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
HANDLE hFileMapping = CreateFileMapping(hFile,
NULL,
PAGE_READONLY,
0,
0,
NULL);
__int64 qwFileOffset=0,qwNumOf0s=0,qwFileSize=m_FileSize,qwTempFileOffset=0;
__int64 sectionsize=0;
CloseHandle(hFile);
int count=m_ShowList1.GetItemCount();
for(int i=0;i<count;i++)
{
CString tempFile=m_ShowList1.GetItemText(i,0);//第一个文件名
CString tempBytestr=m_ShowList1.GetItemText(i,1);
int index=tempBytestr.Find('B');
if(index==-1)//错误处理
{
}
tempBytestr=tempBytestr.Left(index);
sectionsize=_atoi64(tempBytestr);
if(sectionsize<=0)//错误处理
{
}
HANDLE TemphFile =CreateFile(tempFile,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,
NULL);
HANDLE TemphFileMapping = CreateFileMapping(TemphFile,
NULL,
PAGE_READWRITE,
(DWORD)(sectionsize>>32),
(DWORD)(sectionsize&0xFFFFFFFF),
NULL);
DWORD error=GetLastError();
CloseHandle(TemphFile);
__int64 Tempsectionsize=sectionsize;
while (Tempsectionsize > 0)
{
DWORD dwBytesInBlock=m_sinfo.dwAllocationGranularity;
if(sectionsize<m_sinfo.dwAllocationGranularity)
dwBytesInBlock =(DWORD) sectionsize;
PBYTE pbFile=(PBYTE)MapViewOfFile(hFileMapping,
FILE_MAP_READ,
(DWORD)((qwFileOffset+qwTempFileOffset)>>32),
(DWORD)((qwFileOffset+qwTempFileOffset)&0xFFFFFFFF),
dwBytesInBlock);
PBYTE TemppbFile=(PBYTE)MapViewOfFile(TemphFileMapping,
FILE_MAP_WRITE,
(DWORD)((qwTempFileOffset)>>32),
(DWORD)((qwTempFileOffset)&0xFFFFFFFF),
dwBytesInBlock);
error=GetLastError();
//BYTE c,cc;
for(DWORD dwByte = 0; dwByte < dwBytesInBlock; dwByte++)
{
TemppbFile[dwByte] = pbFile[dwByte];
//qwNumOf0s++;
}
UnmapViewOfFile(TemppbFile);
UnmapViewOfFile(pbFile);
qwTempFileOffset += dwBytesInBlock;
Tempsectionsize -= dwBytesInBlock;
//TemppbFile++;
//pbFile++;
}
qwFileSize-=sectionsize;
qwFileOffset += sectionsize;
CloseHandle(TemphFileMapping);
}
CloseHandle(hFileMapping);上面标有红色的这句error=GetLastError();返回错误码为5,不知是哪里的错了
HANDLE hFile = CreateFile(filename,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
HANDLE hFileMapping = CreateFileMapping(hFile,
NULL,
PAGE_READONLY,
0,
0,
NULL);
__int64 qwFileOffset=0,qwNumOf0s=0,qwFileSize=m_FileSize,qwTempFileOffset=0;
__int64 sectionsize=0;
CloseHandle(hFile);
int count=m_ShowList1.GetItemCount();
for(int i=0;i<count;i++)
{
CString tempFile=m_ShowList1.GetItemText(i,0);//第一个文件名
CString tempBytestr=m_ShowList1.GetItemText(i,1);
int index=tempBytestr.Find('B');
if(index==-1)//错误处理
{
}
tempBytestr=tempBytestr.Left(index);
sectionsize=_atoi64(tempBytestr);
if(sectionsize<=0)//错误处理
{
}
HANDLE TemphFile =CreateFile(tempFile,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,
NULL);
HANDLE TemphFileMapping = CreateFileMapping(TemphFile,
NULL,
PAGE_READWRITE,
(DWORD)(sectionsize>>32),
(DWORD)(sectionsize&0xFFFFFFFF),
NULL);
DWORD error=GetLastError();
CloseHandle(TemphFile);
__int64 Tempsectionsize=sectionsize;
while (Tempsectionsize > 0)
{
DWORD dwBytesInBlock=m_sinfo.dwAllocationGranularity;
if(sectionsize<m_sinfo.dwAllocationGranularity)
dwBytesInBlock =(DWORD) sectionsize;
PBYTE pbFile=(PBYTE)MapViewOfFile(hFileMapping,
FILE_MAP_READ,
(DWORD)((qwFileOffset+qwTempFileOffset)>>32),
(DWORD)((qwFileOffset+qwTempFileOffset)&0xFFFFFFFF),
dwBytesInBlock);
PBYTE TemppbFile=(PBYTE)MapViewOfFile(TemphFileMapping,
FILE_MAP_WRITE,
(DWORD)((qwTempFileOffset)>>32),
(DWORD)((qwTempFileOffset)&0xFFFFFFFF),
dwBytesInBlock);
error=GetLastError();//就这句反回值为5,上面的MapViewOfFile函数反回NULL指针,不知是怎么错了?
//BYTE c,cc;
for(DWORD dwByte = 0; dwByte < dwBytesInBlock; dwByte++)
{
TemppbFile[dwByte] = pbFile[dwByte];
//qwNumOf0s++;
}
UnmapViewOfFile(TemppbFile);
UnmapViewOfFile(pbFile);
qwTempFileOffset += dwBytesInBlock;
Tempsectionsize -= dwBytesInBlock;
//TemppbFile++;
//pbFile++;
}
qwFileSize-=sectionsize;
qwFileOffset += sectionsize;
CloseHandle(TemphFileMapping);
}
CloseHandle(hFileMapping);