2011-02-10 50 views
1

說我有一個在VB6中創建這樣一個數據文件:在VB.NET中從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失敗。我的猜測是失敗,因爲它無法處理非零基數組。有沒有人有辦法從.NET中的VB6數據文件中讀取一個基於數組的文件?

這裏是我的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) 

請注意,我在看實際的文件是遠遠超過這個例子更復雜,因爲它們可能包含嵌套的數組,要麼零或1型多維陣列。

非常感謝您的幫助,

肯尼

回答

0

你能提供的示例文件一起玩任何機會呢?我猜測任何解決方案都需要將數據讀入流中,然後編碼進行轉換。

1

你的問題不是數組是基於1還是0的數組。數組索引不存儲在文件中,只是數組數據。如果使用基於C語言加載數組,它將是一個從零開始的數組(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