代码之家  ›  专栏  ›  技术社区  ›  Bubo

文件流读/写

  •  2
  • Bubo  · 技术社区  · 12 年前

    好的,所以我正在编写另一个程序来处理二进制文件。这个程序导入的文件比我以前处理过的任何文件都大,大约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是如何工作的吗?它是否将所有内容存储到字节数组“数据”中,然后我可以根据自己的意愿进行操作,或者在读取文件时必须对其进行操作。我再次道歉,如果这是初级的,所有的想法都很感激

    2 回复  |  直到 12 年前
        1
  •  7
  •   Steve    12 年前

    这条线

    stream.Read(data, 0, size); 
    

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

    看见 FileStream.Read MSDN上的文档

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

    但是,DotNet有专门的类用于读取和写入二进制文件。
    请参阅上的文档 BinaryReader

        2
  •  3
  •   Austin Salonen gmlacrosse    12 年前

    这并不能完全回答你关于 流式阅读的工作原理 但它确实说明了一个事实,即你想要的东西已经存在于.Net中。

    File.ReadAllBytes 对于12K文件来说,可以毫无问题地工作。

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