我尝试过使用BinaryReader,但这绝对不行。它在第一个读取器上几乎塞满了.Readx位。
所以,我已经改变了方向,并试图使用FILEOPEN,FILEGETOBJECT,FILEPUTOBJECT。
这适用于第一个"记录",但从那时起,我正在
"尝试读取或写入受保护的内存。这通常表明其他内存已损坏"
到目前为止,这是代码:
Dim iFreeFile As Integer = FreeFile()
Dim iFileLength As Integer
' open the file
iFreeFile = FreeFile()
FileOpen(iFreeFile, inFilePath, OpenMode.Binary, OpenAccess.Read, OpenShare.Default)
iFileLength = FileLen(inFilePath)
' This bit reads the data
Dim recordLength As Integer = Marshal.SizeOf(outValue)
Dim myBytes As Byte() : ReDim myBytes(recordLength)
FileGet(iFreeFile, myBytes, inRecordCount)
BuildStr(myBytes, outValue.GetType, outValue)
inRecordCount += 1
outValue是几种结构之一
''' <summary>
''' ' Marshal the Byte Array to the Structure
''' </summary>
''' <param name="Buff">Array of Bytes</param>
''' <param name="MyType">Type of the Structure</param>
''' <param name="outBuffer">Structure Object</param>
Private Sub BuildStr(ByVal Buff() As Byte,
ByVal MyType As System.Type,
ByRef outBuffer As Object)
' Marshal the Byte Array to the Structure
Dim MyGC As GCHandle = GCHandle.Alloc(Buff, GCHandleType.Pinned)
'Marshals data from an unmanaged block of memory
'to a newly allocated managed object of the specified type.
outBuffer = Marshal.PtrToStructure(MyGC.AddrOfPinnedObject, MyType) ' <----- here we get the error
End Sub
myBytes数组从FileGet指令加载正常。 outValue传递给ByRef。
可能导致此错误的原因是什么?
我昨晚有一个想法,每次读取记录时我是否必须关闭并重新打开文件?
答案 0 :(得分:0)
按照降低方法的可能性的降序排列:
选项1 在VB6中编写一个小程序,以更通用的格式写入数据,比如XML。这样就不那么难以在VB.NET中阅读。
选项2 在VB.NET中使用FileGet Function。绝对阅读该文档中的所有注释,并首先回顾VB6代码如何编写数据。如果事实证明FileGet不适用于Option Strict On(我假设您正在使用),那么将读取该文件的类放在单独的类文件中,以便您可以对该一个类使用Option Strict Off。 / p>
选项3 一次读取文件到一个字节数组并解析它。 How Visual Basic 6 Stores Data可能有用 如果 VB6将数据存储到磁盘的方式与将其存储在RAM中的方式相同。
此外,您应该按照以下方式构建文件流和阅读器用法,以确保一切都处理整齐:
Using oFS As New FileStream(filePath, FileMode.Open, FileAccess.Read)
Using oBR As New BinaryReader(oFS)
' reading code goes here
End Using
End Using
P.S。 Comparitave-&GT;比较