Загрузить массив на основе одного из файла данных VB6 в VB.NET? - PullRequest
1 голос
/ 10 февраля 2011

Скажем, у меня есть файл данных, который был создан в VB6 следующим образом:

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

Я пытаюсь использовать пространство имен Microsoft.VisualBasic для чтения содержимого этого файла с помощью процедуры FileGetObject. Однако FileGetObject завершается с ошибкой IndexOutOfRangeException. Я предполагаю, что это терпит неудачу, потому что это не может обращаться с ненулевыми массивами. У кого-нибудь есть способ прочитать массив на основе одного из файла данных VB6 в .NET?

Вот мой код VB.NET:

Imports Microsoft.VisualBasic

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

Dim arr as Object
FileGetObject(mFileNumber, arr)

Обратите внимание, что реальные файлы, которые я читаю, намного сложнее, чем этот пример, так как они могут содержать вложенные массивы и многомерные массивы на основе 0 или 1.

Большое спасибо за помощь,

Kenny

Ответы [ 2 ]

1 голос
/ 17 февраля 2011

Ваша проблема не в том, является ли массив массивом на основе 1 или 0.Индекс массива не сохраняется в файле, только данные массива.Если вы загрузите массив на языке Си, это будет массив с нуля (от 0 до 9).Вы уверены, что это не просто получение всех данных, а затем ошибка в конце файла?Попробуйте открыть файл в случайном режиме и выполнить цикл и посмотреть, где происходит ваша ошибка:

    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 голосов
/ 13 февраля 2011

Есть ли шанс, что вы можете предложить образец файла для игры? Я предполагаю, что любое решение потребует чтения данных в поток, а затем кодирования чего-либо для преобразования.

...