2016-07-14 25 views
0

私はvb.netコードを持っており、VB 6.0でそれを変換したいと考えています。しかし、私はいくつかの困難を抱えています。私はいくつかの.netクラスに相当するものを見つけることができません。VB 6.0 VB.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 

さて、ドキュメントは大きくチャンクを使用しています。しかし、私はvb 6.0の手順を知らない

私はバイナリの読書のために何をすべきかなど。

+6

VB.NET - > VB6は私にとっては悪い考えです。 VB6でこの機能が必要な場合は、.NETコードからアセンブリを作成し、COM interopに登録してください。再書き込みは必要ありません。 –

+0

vb 6.0でツールを使用していますが、この部分を変更する必要があります。 .netその後、vb 6でそれをしなければならない – unbalanced

+0

[バイナリファイルを配列に読み込む]可能な複製(http://stackoverflow.com/questions/2456110/read-a-binary-file-into-an-array ) – pmcoltrane

答えて

1

とストリームを書き込み、ここでの例です: http://referencesource.microsoft.com/#mscorlib/system/io/filestream.cs

とBinaryReaderについて:ここで

はFileStream.csのソースですどのようにVB6でADODB.Streamを使用してそれを行うことができます。

Project | Referencesの下には、ADO Active X Data Objects Libraryへの参照を追加します。私のバージョンは6.1ですが、ちょうど最新のバージョンを選択することが、あなたは大丈夫でなければなりません - 詳細情報をオンラインあなたはすべてのADODB.Stream methods and properties

を見たい場合は -

はそれが役に立てば幸いADOのバージョンがシステムにインストールされているに依存します

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 
1

VB.NETをVB6に変換することは悪い考えであり、完全に不要です。 VB6アプリケーションからVB.NETコードを使用する必要がある場合は、.NETライブラリ用のCOM可視ラッパーを作成し、VB6アプリケーションからそのラッパーを呼び出すことが最善の方法です。

おそらくVB6でコードを機能的に変換できますが、実際には何の意味もありません。 VB.NETはVB6よりも優れた言語であり、COM機能を使用して無限のスケッチVB6コードを作成する手間を省きます。

これを実行するとデッドセットされた場合、StreamクラスとReaderクラスを機能的に再現する必要があります。書き込みストリームを開いて読み取りを閉じるためのすべてのコードがなければ http://referencesource.microsoft.com/#mscorlib/system/io/binaryreader.cs

関連する問題