用 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&)这样可以正常读写。但是总觉得有点别扭,也奇怪为什么回卷指针后会出现这样的问题。
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&)这样可以正常读写。但是总觉得有点别扭,也奇怪为什么回卷指针后会出现这样的问题。
要随机访问试试加上 FILE_FLAG_RANDOM_ACCESS 标志。还有VB本身就能操作二进制文件,为什么还要API?
ReadFile hFile, lngTmp, 4, ret, ByVal 0&
If ret <> 4 Then Exit Function
' 计算新值
lngNumber = lngNumber + lngTmp
ret = SetFilePointer(hFile, -4, ByVal 0&, FILE_CURRENT)
ret = WriteFile(hFile, lngNumber, 4, n, ByVal 0&)
If n <> 4 Then Exit Function
ret = SetFilePointer(hFile, -4, ByVal 0&, FILE_CURRENT)
ret = ReadFile(hFile, lngTmp, 4, n, ByVal 0&)
If n <> 4 Then Exit Function
If lngTmp = lngNumber Then Update_Trace_File_Number_of_Traces_Ex = True大家可以继续讨论,晚一点结贴。
你的E分区呢? ^_^我的最大分区才60G。
160G的硬盘(有点小 ^_^),分了6个分区。
n = SetFilePointer(hFile, 0, ByVal 0&, FILE_CURRENT)
ReadFile hFile, lngTmp, 4, ret, ByVal 0&
If ret <> 4 Then Exit Function
' 计算新值
lngNumber = lngNumber + lngTmp
Call SetFilePointer(hFile, n, 0, FILE_BEGIN)
Call WriteFile(hFile, lngNumber, 4, ret, ByVal 0&)
If ret <> 4 Then Exit Function
Call SetFilePointer(hFile, n, 0, FILE_BEGIN)
Call ReadFile(hFile, lngTmp, 4, ret, ByVal 0&)
If ret <> 4 Then Exit Function
If lngTmp = lngNumber Then Update_Trace_File_Number_of_Traces_Ex = True 谢谢大家的提示。结贴。
ret = SetFilePointer(hFile, -4, -1, FILE_CURRENT)