Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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
C# 使用C读取(使用Filesystem.FileGet)VB6记录文件(使用Put写入)#_C#_.net_Vb6 - Fatal编程技术网

C# 使用C读取(使用Filesystem.FileGet)VB6记录文件(使用Put写入)#

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

我需要从VisualBasic6生成的遗留数据库文件中读取数据。 从遗留软件中,我发现该文件是使用
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
并使用文件系统
。你会惊讶于人们忽视了这些@解码器94
VBFixedArray
最多支持二维。尝试将数组声明为动态大小,以便
Put
写入也可以通过
Get
@Decoder94 Try
VBFixedArray(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
),其余的应该与您无关。