Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB6到VB.NET写入随机访问文件_Vb.net_Vb6_Vb6 Migration - Fatal编程技术网

VB6到VB.NET写入随机访问文件

VB6到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

我有一个传统的VB6应用程序,它以随机访问模式写入文件。然后由第三方开发的应用程序读取该文件

我的任务是在VB.NET中重写VB6应用程序,但是第三方应用程序不会更改。我曾尝试将VB6代码转换为VB.NET,但随机访问文件未被正确读取

下面提供了VB6和VB.NET代码的浓缩片段。VB.NET代码已成功写入文件,但字段长度不正确,读取文件的应用程序未正确解析数据。如何以相同的方式写入随机访问文件

我四处寻找,但没有找到有效的解决方案

VB6

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中,有一个属性,但是,它似乎并没有真正约束字符串。