VB6到VB.NET写入随机访问文件
我有一个传统的VB6应用程序,它以随机访问模式写入文件。然后由第三方开发的应用程序读取该文件 我的任务是在VB.NET中重写VB6应用程序,但是第三方应用程序不会更改。我曾尝试将VB6代码转换为VB.NET,但随机访问文件未被正确读取 下面提供了VB6和VB.NET代码的浓缩片段。VB.NET代码已成功写入文件,但字段长度不正确,读取文件的应用程序未正确解析数据。如何以相同的方式写入随机访问文件 我四处寻找,但没有找到有效的解决方案 VB6VB6到VB.NET写入随机访问文件,vb.net,vb6,vb6-migration,Vb.net,Vb6,Vb6 Migration,我有一个传统的VB6应用程序,它以随机访问模式写入文件。然后由第三方开发的应用程序读取该文件 我的任务是在VB.NET中重写VB6应用程序,但是第三方应用程序不会更改。我曾尝试将VB6代码转换为VB.NET,但随机访问文件未被正确读取 下面提供了VB6和VB.NET代码的浓缩片段。VB.NET代码已成功写入文件,但字段长度不正确,读取文件的应用程序未正确解析数据。如何以相同的方式写入随机访问文件 我四处寻找,但没有找到有效的解决方案 VB6 Type Person ID as Strin
Type Person
ID as String * 5
Name as String * 25
EyeColor as String * 10
End Type
Dim myPerson as Person
myPerson.ID = "13"
myPerson.Name = "Joe"
myPerson.EyeColor = "Blue"
Open <file path> For Random As <file number> Len = Len(myPerson)
Put <file number>, myPerson.ID, myPerson
Close <file number>
输入人物
ID为字符串*5
名称为字符串*25
眼色为字符串*10
端型
把我的人当作人
myPerson.ID=“13”
myPerson.Name=“乔”
myPerson.EyeColor=“蓝色”
以Len=Len(myPerson)的形式随机打开
Put,myPerson.ID,myPerson
接近
VB.NET
Structure Person
<VBFixedString(5)> Dim ID As String
<VBFixedString(25)> Dim Name As String
<VBFixedString(10)> Dim EyeColor As String
End Structure
Dim myPerson as New Person
myPerson.ID = "13"
myPerson.Name = "Joe"
myPerson.EyeColor = "Blue"
FileOpen(<file number>, <file path>, OpenMode.Random, , , Len(myPerson))
FilePut(<file number>, myPerson, myPerson.ID)
FileClose(<file number>)
结构人
作为字符串的Dim ID
将名称设置为字符串
暗眼色如弦
端部结构
把我的人当作新人
myPerson.ID=“13”
myPerson.Name=“乔”
myPerson.EyeColor=“蓝色”
FileOpen(,OpenMode.Random,,Len(myPerson))
FilePut(,myPerson,myPerson.ID)
FileClose()
不确定这是否解决了编码问题
我在测试中硬编码了FilePut RecordNumber
Structure Person
<VBFixedString(5)> Dim ID As String
<VBFixedString(25)> Dim Name As String
<VBFixedString(10)> Dim EyeColor As String
End Structure
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim myPerson As New Person
myPerson.ID = "13".PadLeft(5)
myPerson.Name = "Joe".PadLeft(15)
myPerson.EyeColor = "Blue".PadLeft(10)
Stop
FileOpen(1, "C:\temp\random.bin", OpenMode.Random, , , Len(myPerson))
FilePut(1, myPerson, 2) ' needs integer RecordNumber - depreciated?
FileClose(1)
End Sub
结构人
作为字符串的Dim ID
将名称设置为字符串
暗眼色如弦
端部结构
私有子按钮2\u单击(发送者作为对象,e作为事件参数)处理按钮2。单击
把我的人当作新人
myPerson.ID=“13”。左键(5)
myPerson.Name=“Joe”PadLeft(15)
myPerson.EyeColor=“Blue”。左键(10)
停止
FileOpen(1,“C:\temp\random.bin”,OpenMode.random,,Len(myPerson))
FilePut(1,myPerson,2)“需要整数记录编号-折旧?
文件关闭(1)
端接头
Visual Studio有一个十六进制编辑器-我认为是“文件,打开”下的一个选项,不确定这是否解决了编码问题 我在测试中硬编码了FilePut RecordNumber
Structure Person
<VBFixedString(5)> Dim ID As String
<VBFixedString(25)> Dim Name As String
<VBFixedString(10)> Dim EyeColor As String
End Structure
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim myPerson As New Person
myPerson.ID = "13".PadLeft(5)
myPerson.Name = "Joe".PadLeft(15)
myPerson.EyeColor = "Blue".PadLeft(10)
Stop
FileOpen(1, "C:\temp\random.bin", OpenMode.Random, , , Len(myPerson))
FilePut(1, myPerson, 2) ' needs integer RecordNumber - depreciated?
FileClose(1)
End Sub
结构人
作为字符串的Dim ID
将名称设置为字符串
暗眼色如弦
端部结构
私有子按钮2\u单击(发送者作为对象,e作为事件参数)处理按钮2。单击
把我的人当作新人
myPerson.ID=“13”。左键(5)
myPerson.Name=“Joe”PadLeft(15)
myPerson.EyeColor=“Blue”。左键(10)
停止
FileOpen(1,“C:\temp\random.bin”,OpenMode.random,,Len(myPerson))
FilePut(1,myPerson,2)“需要整数记录编号-折旧?
文件关闭(1)
端接头
Visual Studio有一个十六进制编辑器-我认为是“文件,打开”下的一个选项。您是否使用十六进制编辑器查看文件?可能是Ansi与Unicode的关系?您应该查看包含用于编写文件的VB.NET函数的类,而不是使用旧的VB6方法。你不太清楚什么不起作用,很难帮助你。这里有一个猜测:您可以使用该方法添加额外的空间。正在创建随机访问文件,如果我使用.net对它们进行写入和读取,则所有功能都会正常工作。根据我到目前为止的研究,字节级别的字段长度似乎存在问题。VB6固定字段长度与VB.NET对应部分不同VB6字段长度有什么不同?输出文件应该是什么编码?我的理解是:在VB6中,一个字符=1字节,在VB.NET中,一个字符=2字节。因此,当VB6字符串定义为:Name as string*25时,该字符串的固定长度为25字节。在.net中,有一个属性,但是,它似乎没有真正约束字符串。您是否使用十六进制编辑器查看该文件?可能是Ansi与Unicode的关系?您应该查看包含用于编写文件的VB.NET函数的类,而不是使用旧的VB6方法。你不太清楚什么不起作用,很难帮助你。这里有一个猜测:您可以使用该方法添加额外的空间。正在创建随机访问文件,如果我使用.net对它们进行写入和读取,则所有功能都会正常工作。根据我到目前为止的研究,字节级别的字段长度似乎存在问题。VB6固定字段长度与VB.NET对应部分不同VB6字段长度有什么不同?输出文件应该是什么编码?我的理解是:在VB6中,一个字符=1字节,在VB.NET中,一个字符=2字节。因此,当VB6字符串定义为:Name as string*25时,该字符串的固定长度为25字节。在.net中,有一个属性,但是,它似乎并没有真正约束字符串。