2014-07-17 22 views
2

我遇到了一些奇怪的問題,我不知道這是否是預期的行爲或錯誤。位圖類正在通過填充空字符來改變輸入文件流

我只是隨機創建了一個文件流,它不是一個圖像流,一些其他文件流如pdf/doc等。文件流以可寫模式打開。它發生了,我的另一部分代碼,由於某些原因,將文件流的位置設置爲超出實際文件流長度的較大值。

然後我打電話位圖的構造器通過這個文件流,並存儲在磁盤上實際文件被改變,文件的大小變得過於龐大。當我打開修改後的文件並進行檢查時,我注意到,當文件流的位置超出其長度時,Bitmap類將填充空字符。文件大小正在等於我設置的位置值。然後我注意到它發生在我通過的任何文件中,包括圖像文件。

下面是代碼:

 Bitmap bitmap = null; 
     FileStream fs = new FileStream(@"C:\\sampleFile.ext", FileMode.Open, FileAccess.ReadWrite); 
     try 
     {    
      fs.Position = fs.Length * 100;    
      bitmap = new Bitmap(fs); 
     } 
     catch (Exception) 
     { 
      if (bitmap != null) 
       bitmap.Dispose(); 
      fs.Dispose(); 
     } 

我的疑問是,這是已知的行爲呢?

回答

1

它是預期的行爲作爲文件中讀寫模式打開和位置旨在被定位成偏移所需的。由於文件位置指向指定的位置文件,當需要由其他對象(本例中爲位圖)讀取文件時,文件將填充零字節。

4

FileStream.Position:

求超出流的長度的任何位置處的文檔支持。 當您尋找超出文件長度時,文件大小會增加。

所以,是的,它是記錄和預期的行爲。

+0

因此,問題中'位圖'的重點是所有的紅色鯡魚? –

0

是的。這是已知的行爲。

尋求超出流長度的任何位置都被支持。當您超出文件長度時,文件大小會增加。在Microsoft Windows NT和更高版本中,添加到文件末尾的任何數據都設置爲零。

表格MSDN