2012-08-08 126 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");