开发者

Load a One-Based Array from VB6 Data File in VB.NET?

Say I have a data file that was created in VB6 like this:

Dim arr As Variant
Dim unit As Integer
Dim i As Integer

unit = FreeFile
Open "SomeFile.dat" For Binary As unit

ReDim arr(1 To 10)
For i = 1 To 10
    arr(i) = i
Next
Put #unit, , arr
Close #unit

I'm attempting to use the Microsoft.VisualBasic namespace to read the contents of this file by using the FileGetObject routine. However, FileGetObject fails with an IndexOutOfRangeException. My guess is it fails because it cannot handle non-zero-based arrays. Does anyone have a way to read a one-based array from a VB6 data file in .NET?

Here's my VB.NET code:

Imports Microsoft.VisualBasic

Dim mFileNumber as Integer = FreeFile()
FileOpen(mFileNumber, "SomeFile.dat", OpenMode.Binary, OpenAccess.Read)

Dim arr as Object
FileGetObject(mFileNumber, arr)

Note that the actual files I'm reading are much more compl开发者_StackOverflow社区icated than this example, as they could contain nested arrays and either 0- or 1-based multidimensional arrays.

Thank you very much for your help,

Kenny


Your issue is not whether the array is a 1 or 0 based array. The array index is not stored in the file, just the array data. If you load the array in C based language it will be a zero-based array (0 to 9). Are you sure tat it is not just getting all the data and then erroring out at the end of the file? Try opening the file in random mode and looping and see where your error occurs:

    Try
        Dim fileHandle As Integer = 1
        Dim c As String
        FileSystem.FileOpen(fileHandle, My.Computer.FileSystem.SpecialDirectories.Desktop & "\test.dat", OpenMode.Random)
        For i = 1 To 10
            FileSystem.Seek(fileHandle, i)
            FileSystem.FileGetObject(fileHandle, c)
            MsgBox(c)
        Next
        FileSystem.FileClose(fileHandle)

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜