2012-08-08 122 views
2

好吧,所以我正在编写另一个程序来处理二进制文件。该程序导入的文件比我之前操作的任何文件都大,大约为12K。FileStream读/写

我很好奇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是如何工作的,它都存储到字节数组“数据”,然后我可以在我看来合适的情况下操作它,或者在读取文件时必须操作文件。我再次道歉,如果这是基本的,所有的心思都赞赏

+1

http://msdn.microsoft.com/en-us/library/system.io.filestream.read.aspx – 2012-08-08 20:56:06

回答

7

此行

stream.Read(data, 0, size); 

读一切从流和存储在您的字节数组
可以启动阵列上直接使用的文件内容。

参见MSDN

FileStream.Read文档你的代码读取该文件的长度,分配正确大小的字节数组,然后读取单杆一切。
当然,如果你的文件真的很大,这种方法是不可行的。
(并且'big'的定义可能与可用内存相比有所不同)。 在这种情况下,使用的方法是读取文件的块,处理和循环直到读取所有字节。

但是,DotNet有专门的读写二进制文件的类。
查看BinaryReader

+0

所以,从我看,它会自动为你读取并存储,让数组进行操作? – Bubo 2012-08-08 20:59:55

+0

也是关于bytecounter的代码, – Bubo 2012-08-08 21:05:34

+0

是的,你会得到文件的长度,分配一个正确大小的字节,然后在一个镜头中读取所有内容。 (在我的回答中增加了一些想法) – Steve 2012-08-08 21:08:11

2

文档这并不完全回答你的问题,以Stream.Read如何工作但确实照亮你想要的东西已经存在于.NET中的事实。

File.ReadAllBytes对12K文件没有问题。

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