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,不知是哪里的错了

解决方案 »

  1.   


    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);
      

  2.   

    5 --- Access Deny,你的数据以及共享内存访问权限是否设置正确
      

  3.   

    可是for语句第一次循环时并没有错误的