2011-10-20 13 views
0

私は、PCからアプリケーションにファイルを読み込むことに疲れています。 16進数でファイルを読み込みます。 これで私はこれらのコードを持っていましたが、すべてが小さいファイルサイズで大丈夫です。 1GBのファイルファイルを配列にロードする

私の質問は、私たちのすべてのようなHEXファイルリーダーを知って

です(六角ワークショップエディタ6を...と進エディタネオ

私はこれらをダウンロードして、私が読ん未満ファイルオーバーヘッド(36GB)(39,490,420,735バイト) RAMメモリにセーブバイトなし ??? vb.Net、IN

私は、アレイ内の1ギガバイトを超えるファイルの六角を読むようにしてください。> Windows 7は、私は私が私のマシンで2ギガバイトを持っているので、それは知っている

を応答していません!

これは私が使用するコードです

サイズに関係なく、任意のファイルをロードするために使用します(六角ワークショップ)という方法は何ですか。

X = String.Join(" ", IO.File.ReadAllBytes("Location of file").Select(Function(b) b.ToString("X2")).ToArray()) 

どうぞご了承ください。

答えて

0

これらのプログラムは、基本的に、彼らは一度にファイルの一部に読んPaging

のフォームを使用し、彼らは最後に読んで場所を覚えて、ユーザーがスクロールは、彼らは別の「ページ」のをフェッチそしてときファイルからのデータ。

.Net 4.0には、Memory Mapped Filesの直接サポートが含まれていますが、これは役立つかもしれませんが、そのAPIがなくてもこれは簡単です。

シンプルな(テストされていない)ページングクラス。

Public Class PagedFile 
    Implements IDisposable 

    Private stream As IO.BinaryReader 
    Private pageSize As Integer 
    Public Sub New(fileName As String, pageSize As Integer) 
     stream = New IO.BinaryReader(New IO.FileStream(fileName, IO.FileMode.Open)) 
     Me.pageSize = pageSize 
    End Sub 

    Public ReadOnly Property PageCount As Integer 
     Get 
      Dim pages As Double = stream.BaseStream.Length/pageSize 
      If stream.BaseStream.Length Mod pageSize = 0 Then 
       Return CInt(pages) 
      Else 
       Return CInt(Math.Floor(pages)) + 1 
      End If 
     End Get 
    End Property 

    ' 0 is the first page 
    Public Function GetPage(pageNo As Integer) As Byte() 
     If (pageNo < 0) Then 
      Throw New ArgumentOutOfRangeException("pageNo", "Must be greater than zero") 
     End If 
     If (pageNo >= PageCount) Then 
      Throw New ArgumentOutOfRangeException("pageNo", "Must be less than the number of pages in this file: " & PageCount) 
     End If 
     stream.BaseStream.Seek(pageNo * pageSize, IO.SeekOrigin.Begin) 
     Return stream.ReadBytes(pageSize) 
    End Function 

#Region "IDisposable Support" 
End Class 

これが役立ちます。

更新
申し訳ありませんが、私はあなたのコメントにするために求めているものを理解していません。
あなたのUIでは、ユーザーページのように、現在のページを覚えておき、ユーザーがスクロールするたびに次のページをフェッチするだけです(または、一度に3ページずつロードする、前のページ、現在のページ、次のページ)次のページがすぐに表示され、別のページ(新しい次のページ)を非同期的に、またはUIがアイドル状態のときに取得できます。

NBこれは、ユーザーが、彼らはPage Downキーを押すたびに待っていないように、「ページ」は、ユーザーが見ているものよりも大きいことが持っている意味を行うことができます。

関連する問題