蜘蛛抱蛋 发表于 2011-1-29 20:31:34

反向读取二进制[已解决]

本帖最后由 蜘蛛抱蛋 于 2011-1-30 10:51 编辑

可不可以从文件末尾开始读取一定数量的二进制数据?类似 FileRead($File, -100)?

netegg 发表于 2011-1-29 20:38:10

$aWords=stringsplit(fileread($file),'')
_ArrayReverse($aWords)
filewritefromarray($fileq, $aWords)
不知道行不行

3mile 发表于 2011-1-29 20:41:36

_WinAPI_CreateFile()
_WinAPI_SetFilePointer()
_WinAPI_SetEndOfFile()
_WinAPI_ReadFile()

蜘蛛抱蛋 发表于 2011-1-29 20:47:14

回复 2# netegg


呵呵,我说的是比较大的二进制文件。从头开始读太慢,我只要末尾的一定字节长度的数据
    回复 3# 3mile


    楼上所指的方法我也有想过一直在研究这个帖子   可是怎么的到文件末尾的 指针?

3mile 发表于 2011-1-29 20:54:07

_WinAPI_GetFileSizeEx

蜘蛛抱蛋 发表于 2011-1-29 21:40:12

回复 5# 3mile


    谢谢!尽管不懂C语言,仿照例子还是写出来了
#include <WinAPI.au3>
#include <Timers.au3>
Local $sFile, $hFile, $sText, $nBytes, $tBuffer, $pointer

$sFile = @ScriptDir & '\1.zip'
$tBuffer = DllStructCreate("byte")
Local $f = _Timer_Init()
$hFile = _WinAPI_CreateFile($sFile, 2, 2)
$pointer = _WinAPI_GetFileSizeEx($hFile) - 100
_WinAPI_SetFilePointer($hFile, $pointer)
_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 100, $nBytes)
_WinAPI_CloseHandle($hFile)
$sText = StringTrimLeft(DllStructGetData($tBuffer, 1),2)
$s = _Timer_Diff($f)
MsgBox(0,'',$s)
ConsoleWrite($sText)
页: [1]
查看完整版本: 反向读取二进制[已解决]