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); 

从流中读取所有内容并将文件内容存储在字节数组中
您可以立即开始在数组上工作。

请参阅MSDN 上的FileStream.Read文档

您的代码读取文件的长度,分配正确大小的字节数组,然后一次性读取所有内容。
当然,如果您的文件很大,这种方法是不可行的。
(与可用内存相比,“大”的定义可能不同)。在这种情况下,使用的方法是读取文件的块,处理和循环直到读取所有字节。

但是,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 回答