2

さて、私はバイナリファイルを操作する目的で別のプログラムを書いています。このプログラムは、私が以前に操作しなければならなかったものよりも大きい、約12Kのファイルをインポートしています。

Stream.readコマンドがどのように機能するのか知りたいのですが、これは初歩的なことのように聞こえますが、ファイルが完全に読み取られて操作を開始できるようにするには、どうすればわかりますか。このコード...

// Opens a stream to the path chosen in the open file dialog
using (FileStream stream = new FileStream(chosenFile, FileMode.Open, FileAccess.Read))                     
{
    size = (int)stream.Length; // Returns the length of the file
    data = new byte[size]; // Initializes and array in which to store the file
    stream.Read(data, 0, size); // Begins to read from the constructed stream
    progressBar1.Maximum = size;

    while (byteCounter < size)
    {
        int i = data[byteCounter];

        byteCounter++;
        progressBar1.Increment(1);
    } 
}

これは非常に単純であることを理解していますが、stream.Readがどのように機能するかを誰かに説明してもらえますか、すべてをバイト配列「データ」に格納してから、適切と思われるように操作できますか、それとも操作する必要がありますか読み取られているファイル。繰り返しになりますが、これが初歩的なものである場合はお詫び申し上げます。すべての考えに感謝します。

4

2 に答える 2

7

この行

stream.Read(data, 0, size); 

ストリームからすべてを読み取り、ファイルの内容をバイト配列に格納します
。配列ですぐに作業を開始できます。

FileStreamを参照してください。MSDNのドキュメントを読む

コードはファイルの長さを読み取り、正しいサイズのバイト配列を割り当ててから、すべてを1回のショットで読み取ります。
もちろん、ファイルが本当に大きい場合、この方法は実行できません。
(そして、「big」の定義は、使用可能なメモリと比較して異なる可能性があります)。その場合、使用されるアプローチは、ファイルのチャンクを読み取り、すべてのバイトが読み取られるまで処理およびループすることです。

ただし、DotNetには、バイナリファイルの読み取りと書き込みに特化したクラスがあります。BinaryReader
のドキュメントを参照してください

于 2012-08-08T20:54:45.487 に答える
3

これは、Stream.Readがどのように機能するかについての質問に正確に答えるものではありませんが、必要なものが.Netにすでに存在するという事実を明らかにします。

File.ReadAllBytesは、12Kファイルでは問題なく機能します。

byte[] content = File.ReadAllBytes("path");
于 2012-08-08T21:14:27.430 に答える