SetFilePointer 回卷文件指针后,WriteFile 和 ReadFile 函数失败
of123 2008-05-16 01:48:57 用 CreateFile 函数创建一个磁盘文件,写文件正常:
hFile = CreateFile(strFileName, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, CREATE_NEW, 0, 0)
现需要更新其文件头部分的一个 TLV 对象的 Value 域。从文件起始查找该对象成功(SetFilePointer 和 ReadFile)。
ReadFile hFile, lngTmp, 4, ret, ByVal 0&
If ret <> 4 Then Exit Function
lngNumber = lngNumber + lngTmp '这里正常
ret = SetFilePointer(hFile, -4, 0, FILE_CURRENT) ' ret 得到新的指针,本例 = 2
ret = WriteFile(hFile, lngNumber, 4, n, ByVal 0&) '这里出现问题
'注:ret = 0(期望 1), n = 0(期望 4), GetLastError = 0
'如果上面正常或跳过上面的写,执行下面的读
ret = SetFilePointer(hFile, -4, 0, FILE_CURRENT) ' ret 得到新的指针,本例 = 2
ret = ReadFile(hFile, lngTmp, 4, n, ByVal 0&) '这里出现问题
'注:ret = 1(期望 1), n = 0(期望 4), GetLastError = 0
'按照 MSDN 的说法,返回值 = 1 且 lpNumberofBytesRead = 0 表示指针超出可读区域。
我现在的做法是绕过这一难题:
ret = SetFilePointer(hFile, -4, 0, FILE_CURRENT)
ret = SetFilePointer(hFile, ret, 0, FILE_BEGIN)
ret = WriteFile(hFile, lngNumber, 4, n, ByVal 0&)
'......
ret = SetFilePointer(hFile, -4, 0, FILE_CURRENT)
ret = SetFilePointer(hFile, ret, 0, FILE_BEGIN)
ret = ReadFile(hFile, lngTmp, 4, n, ByVal 0&)
这样可以正常读写。
但是总觉得有点别扭,也奇怪为什么回卷指针后会出现这样的问题。