好的,所以我正在编写另一个程序来操作二进制文件。该程序正在导入一个比我以前必须操作的任何文件都大的文件,大约 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(data, 0, size);
从流中读取所有内容并将文件内容存储在字节数组
中您可以立即开始处理阵列。
请参阅 MSDN 上的 FileStream.Read docs
您的代码读取文件的长度,分配正确大小的字节数组,然后一次性读取所有内容。
当然,如果您的文件非常大,则此方法不可行。
(与可用内存相比,"大"的定义可能不同)。在这种情况下,使用的方法是读取文件块,处理和循环,直到读取所有字节。
但是,DotNet 具有用于读取和写入二进制文件的专用类。
请参阅有关 BinaryReader 的文档
这并不能完全回答你关于Stream.Read如何工作的问题,但确实阐明了你想要的东西已经存在于.Net中的事实。
File.ReadAllBytes 对于 12K 文件可以毫无问题地工作。
byte[] content = File.ReadAllBytes("path");