C# 使用C读取(使用Filesystem.FileGet)VB6记录文件(使用Put写入)#
我需要从VisualBasic6生成的遗留数据库文件中读取数据。 从遗留软件中,我发现该文件是使用C# 使用C读取(使用Filesystem.FileGet)VB6记录文件(使用Put写入)#,c#,.net,vb6,C#,.net,Vb6,我需要从VisualBasic6生成的遗留数据库文件中读取数据。 从遗留软件中,我发现该文件是使用Put编写的,并将排序记录作为参数传递给Put函数。这些结构的定义如下: 键入\u类型 字段_1为单个 字段_2作为字符串*20 场_3(1至50)为单场 字段_4(1到10)作为字符串*1 端型 我的类型更大、更复杂,但我在项目中加入了不同的定义。我发现导入Microsoft.VisualBasic可以让我访问与编写文件类似的VB函数,因此我使用FileSystem.OpenFile()和.Cl
Put
编写的,并将排序记录作为参数传递给Put
函数。这些结构的定义如下:
键入\u类型
字段_1为单个
字段_2作为字符串*20
场_3(1至50)为单场
字段_4(1到10)作为字符串*1
端型
我的类型更大、更复杂,但我在项目中加入了不同的定义。我发现导入Microsoft.VisualBasic
可以让我访问与编写文件类似的VB函数,因此我使用FileSystem.OpenFile()
和.CloseFile()打开和关闭文件代码>现在我需要最终读取包含的数据,因为原始函数是:
Public RecordContent作为\u类型
[...]
获取#1、记录编号、记录内容
我想我可以使用类似的东西,比如Microsoft.VisualBasic.FileSystem.FileGet()
所以问题是,我如何定义一个容器,我假设是一个类,类似于最初的VB6类型和_类型
?如何调用.FileGet()
来正确填充此对象?关键是在VB.NET的结构声明中正确定义属性。如果结构总是由FileGet
初始化,则不需要在构造函数中手动初始化其固定字段,否则就需要手动初始化
构造_类型
公共字段_1作为单个
公共字段_2作为字符串
公共字段_3作为单个()
公共字段_4作为字符()
端部结构
显然,数组必须从零开始,因此上界向下移动
从文件中读取:
Dim d As System.ValueType=新的\u类型()
FileOpen(1,“…”,OpenMode.Random,OpenAccess.Read,OpenShare.Default,234)
FileGet(1,d,1)
文件关闭(1)
234
是VB6中结构的大小。它在VB.NET中更大,因此您需要硬编码。虽然GSerg可能为您指明了正确的方向,但要知道,随机
和二进制
的打开
模式之间的放置
工作方式存在很大差异。有关详细信息,请参阅和。我之所以提出这个问题,是因为如果字符串和数组成员都是固定大小的,我想知道VB6应用程序是否使用了打开。。。二进制
模式。+1用于导入Microsoft.VisualBasic
并使用文件系统
。你会惊讶于人们忽视了这些@解码器94VBFixedArray
最多支持二维。尝试将数组声明为动态大小,以便Put
写入也可以通过Get
@Decoder94 TryVBFixedArray(40)>Dim Channels()读取的值作为Char
@Decoder94数组中有40个元素(2*10*2),每个元素1个Char。这是40个字符。@GSerg在我的vb6结构中,元素(1到2,1到22,1到2)是整数,在VB.Net中,我已转换为Dim Elements(),简而言之,这些是整数。您给出的公式对这个实例有效吗?因为整数可以有3个数字,以此类推,而字符是一个字符?@Decoder94一个整数
是两个字节。这两个字节(“,”,“)的文本表示并不重要。您已经正确匹配了元素的数量(2*22*2=88)和元素的大小(Integer
=Short
),其余的应该与您无关。