回复 21# xms77
那就给个‘获取一个超大文件偏移量’的例子’吧
将下面代码中的$sFile换成你自己机子有的G级文件
#include <APIConstants.au3>
#include <WinAPIEx.au3>
Local $iRead
$sFile = "d:\GhostXP\C_WinXP.GHO" ;指定你自己机子里的一个超大文件,最好2G以上,小文件会报内存错误
$iToRead = 32 ;读取字节数
$iOffset = 234567 ;偏移量
$aSysInfo = _WinAPI_GetSystemInfo()
$iMemGran = $aSysInfo[7] ;得到:内存分配粒度
$iOffset_Slice = Round(Floor($iOffset / $iMemGran)) * $iMemGran ;偏移量必须是分配粒度的倍数
ConsoleWrite("$iOffset_Slice " & @TAB & @TAB & $iOffset_Slice & @CRLF)
$iOffset_Slice_Size = $iOffset - $iOffset_Slice
ConsoleWrite("$iOffset_Slice_Size " & @TAB & $iOffset_Slice_Size & @CRLF)
$hFile = _WinAPI_CreateFileEx($sFile, 3, 0x80000000, 7, 0x08000000)
$hMapping = _WinAPI_CreateFileMapping($hFile, 0, '', $PAGE_READONLY)
$pAddress = _WinAPI_MapViewOfFile($hMapping, $iOffset_Slice, $iOffset_Slice_Size + $iToRead, $FILE_MAP_READ)
$tBuffer = DllStructCreate('byte[' & $iToRead & ']', $pAddress + $iOffset_Slice_Size)
ConsoleWrite(DllStructGetData($tBuffer, 1) & @CRLF)
_WinAPI_UnmapViewOfFile($pAddress)
_WinAPI_CloseHandle($hMapping)
_WinAPI_CloseHandle($hFile)
|