用 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&) 这样可以正常读写。 但是总觉得有点别扭,也奇怪为什么回卷指针后会出现这样的问题。 |