Двоичное чтение и запись VB 6.0 из VB.NET

У меня есть код vb.net, и я хочу преобразовать его в vb 6.0. Но у меня есть некоторые трудности. Я не могу найти эквивалент некоторых классов .net

            Dim byteswritten As Integer
            Dim fs As System.IO.FileStream
            Dim r As System.IO.BinaryReader
            Dim CHUNK_SIZE As Integer = 65554
            fs = New System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read)
            r = New System.IO.BinaryReader(fs)
            Dim FSize As Integer = CType(fs.Length, Integer)
            Dim chunk() As Byte = r.ReadBytes(CHUNK_SIZE)

            While (chunk.Length > 0)
                dmPutStream.Write(chunk, chunk.Length, byteswritten)
                If (FSize < CHUNK_SIZE) Then
                    CHUNK_SIZE = FSize
                    chunk = r.ReadBytes(CHUNK_SIZE)
                Else
                    chunk = r.ReadBytes(CHUNK_SIZE)
                End If
             End While

Ну, документ может быть большим, тогда мы использовали chunk. Но я не знаю шагов для vb 6.0

Например, что я должен сделать для двоичного чтения.


person unbalanced    schedule 14.07.2016    source источник
comment
VB.NET -> VB6 кажется мне плохой идеей. Если вам нужна эта функциональность в VB6, создайте сборку из кода .NET и зарегистрируйте ее для COM-взаимодействия — переписывать не нужно.   -  person Matt Wilko    schedule 14.07.2016
comment
У нас есть инструмент в vb 6.0, и мне нужно изменить некоторый код, но эта часть не существует в vb.net, тогда я должен сделать это в vb 6   -  person unbalanced    schedule 14.07.2016
comment
Возможный дубликат чтения двоичного файла в массив   -  person pmcoltrane    schedule 14.07.2016


Ответы (2)


Без всего вашего кода для открытия потока записи и закрытия потоков чтения и записи, вот пример того, как вы можете сделать это в VB6, используя ADODB.Stream.

Под Project | References добавьте ссылку на ADO Active X Data Objects Library. Моя версия 6.1, но вы можете просто выбрать последнюю версию — зависит от того, какая версия ADO установлена ​​в вашей системе.

Надеюсь, это поможет — больше информации в Интернете, если вы хотите просмотреть все методы и свойства ADODB.Stream

Public Sub StreamData(strWriteFilename As String, filePath As String)

    Const CHUNK_SIZE As Long = 65554

    Dim byteswritten    As Integer
    Dim FSize           As Long

    Dim adofs           As New ADODB.Stream 'Object 'System.IO.FileStream
    Dim varData         As Variant

    ' Include this here - but probably defined elsewhere
    Dim dmPutStream     As New ADODB.Stream

    ' Open Write Stream
    ' *** Looks like you do this elsewhere
    Set dmPutStream = CreateObject("ADODB.Stream")
    With dmPutStream
        .Type = adTypeBinary
        .Open strWriteFilename, adModeWrite
    End With

    ' Open Read strema and start pushing data from it to the write stream
    Set adofs = CreateObject("ADODB.Stream") 'New System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read)
    With adofs
        .Type = adTypeBinary
        .Open
        .LoadFromFile filePath

        ' Size of Read file - do you want this?
        FSize = .Size

        varData = .Read(CHUNK_SIZE)
        Do While Len(varData) > 0
            dmPutStream.Write varData
            If Not .EOS Then
                varData = .Read(CHUNK_SIZE)
            End If
        Loop

        .Close
    End With

    'Save binary data To disk
    dmPutStream.SaveToFile strWriteFilename, adSaveCreateOverWrite
    dmPutStream.Close

End Sub
person dbmitch    schedule 14.07.2016

Преобразование VB.NET в VB6 — плохая идея и совершенно не нужная. Если вам нужно использовать код VB.NET из приложения VB6, лучше всего будет создать видимую для COM оболочку для вашей библиотеки .NET и вызвать эту оболочку из вашего приложения VB6.

Вы, вероятно, МОЖЕТЕ функционально преобразовать код с помощью VB6, но на самом деле в этом нет смысла. VB.NET — лучший язык, чем VB6, используйте его возможности COM, чтобы избавить вас от написания бесконечного фрагментарного кода VB6.

Если вы твердо настроены на это, вам нужно будет функционально воспроизвести классы Stream и Reader.

Вот источник FileStream.cs: http://referencesource.microsoft.com/#mscorlib/system/io/filestream.cs

А для BinaryReader: http://referencesource.microsoft.com/#mscorlib/system/io/binaryreader.cs

person Drunken Code Monkey    schedule 14.07.2016