FileStream读/写

时间:2012-08-08 20:51:33

标签: c# visual-studio-2010 file-io stream

好的,所以我正在编写另一个程序来操作二进制文件。这个程序导入的文件大于我之前必须操作的文件,大约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”中然后我可以按照我认为合适的方式操作它,或者我是否有在阅读时操纵文件。我再次道歉,如果这是基本的,所有的想法都赞赏

2 个答案:

答案 0 :(得分:7)

这一行

stream.Read(data, 0, size); 

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

请参阅MSDN上的FileStream.Read文档

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

但是,DotNet有专门的类来读写二进制文件 请参阅BinaryReader

上的文档

答案 1 :(得分:3)

这并不完全回答你关于 Stream.Read如何工作的问题,但确实说明了你想要的东西已存在于.Net中的事实。

对于12K文件,

File.ReadAllBytes可以正常运行。

byte[] content = File.ReadAllBytes("path");