C# 使用C打开旧的VB6随机访问文件#

C# 使用C打开旧的VB6随机访问文件#,c#,vb6,randomaccessfile,C#,Vb6,Randomaccessfile,我正在尝试打开使用随机访问创建的旧VB6文件 使用的类型如下: Type CDB dateCreated As Date lastModified As Date companyName As String * 30 ownerName As String * 30 contactName As String * 30 addresss As String * 100 tel As String * 75 vat As String

我正在尝试打开使用随机访问创建的旧VB6文件

使用的类型如下:

Type CDB
    dateCreated As Date
    lastModified As Date
    companyName As String * 30
    ownerName As String * 30
    contactName As String * 30
    addresss As String * 100
    tel As String * 75
    vat As String * 8
    BRegd As String * 9
End Type
Dim CDB As CDB
Open "CLIENTS.DAT" For Random As #1 Len = Len(CDB)
Lastrec = LOF(1) / Len(CDB)

For rec = 1 To Lastrec
    Get #1, rec, CDB
    txtDateCreated.Text = Format(CDB.dateCreated, "dd/mm/yyyy")
    txtLastModified.Text = Format(CDB.lastModified, "dd/mm/yyyy")
    txtCompanyName.Text = Trim(CDB.companyName)
    ... and so on
Next
访问情况如下:

Type CDB
    dateCreated As Date
    lastModified As Date
    companyName As String * 30
    ownerName As String * 30
    contactName As String * 30
    addresss As String * 100
    tel As String * 75
    vat As String * 8
    BRegd As String * 9
End Type
Dim CDB As CDB
Open "CLIENTS.DAT" For Random As #1 Len = Len(CDB)
Lastrec = LOF(1) / Len(CDB)

For rec = 1 To Lastrec
    Get #1, rec, CDB
    txtDateCreated.Text = Format(CDB.dateCreated, "dd/mm/yyyy")
    txtLastModified.Text = Format(CDB.lastModified, "dd/mm/yyyy")
    txtCompanyName.Text = Trim(CDB.companyName)
    ... and so on
Next
现在,我想使用C#打开这个文件,并导入SQL数据表中的所有数据。
是否有人可以帮助我使用类型CDB作为结构打开此文件?

要使用我的示例,您必须为Microsoft.VisualBasic.Filesystem程序集创建别名:

Imports VB6FileSystem = Microsoft.VisualBasic.FileSystem
Imports VB = Microsoft.VisualBasic
然后在代码中:

// make sure the read buffer is big enough
string testReadData = "".PadRight(128);
int filenumber = VB6FileSystem.FreeFile();
VB6FileSystem.FileOpen(filenumber, @"c:\temp\test.dat", VB.OpenMode.Random,  RecordLength: 128);

// Write some test data ....
VB6FileSystem.FilePut(filenumber, "Testdaten 1", 1, true);
VB6FileSystem.FilePut(filenumber, "Testdaten 4", 4, true);
VB6FileSystem.FilePut(filenumber, "Testdaten 14", 14, true);
// Read some data ...
VB6FileSystem.FileGet(filenumber, ref testReadData, 14, true);
VB6FileSystem.FileClose(filenumber);
当然,您必须分析旧的记录结构(vb6知道“固定长度字符串”,而C#并不真正知道它们…)以及数据在文件中的表示方式。也许你应该用c语言读一个字节数组#手工处理二进制数据(如日期、数字等)


我没有尝试的是使用字节数组作为引用变量的FileGetObject方法。请随意完成任务。

内容是什么样的?它是二进制的吗?是文本吗?如果文本是什么编码。。。是否可以编写一点VB6代码,将文件内容转换为JSON内容?还是XML?或者您需要直接使用该文件吗?该代码应该可以直接翻译为C#-它并不复杂。但是要注意VB的“日期”信息与.NET的“日期时间”不同?在“Microsoft.VisualBasic…”程序集中,“旧”样式的文件IO“隐藏”在其中一个程序集中(工作非常好,包括处理文件大小>4gb…)可能重复我徒劳地尝试了上面的代码。C#只使用“使用…”而不使用导入。在Microsoft.VisualBasic命名空间下也没有文件系统。这是VStudio 2017。我强烈建议避免对“新”软件的任何VB6产生依赖性。对我来说,这看起来像是一个数据转换项目的作业。@Fildor:这不是真正的VB6,它的.NET(但隐藏在“Microsoft.VisualBasic.*”中)命名空间。我知道这一点。不过,我会考虑把那个命名空间导入到C项目中的非常不干净的行为中。在我的解决方案中添加了一个新的VisualBasic项目,我可以利用这个例子。谢谢!