2013-02-09 53 views
0

int數組我有以下代碼:如何讀取二進制文件的C#

LZW lzw = new LZW(); 
int[] a = lzw.Encode(imageBytes); 

FileStream fs = new FileStream("image-text-16.txt", FileMode.Append); 
BinaryWriter w = new BinaryWriter(fs); 

for (int i = 0; i < a.Length; i++) 
{ 
    w.Write(a[i]); 

} 

w.Close(); 
fs.Close(); 

如何從文件讀取數組元素?我嘗試了幾種方法。例如,我將數組的長度寫入文件,並嘗試讀取數字。但是,我失敗了。

注意。我需要獲得int數組。

+0

你使用哪個LZW庫? – Magnus 2013-02-09 13:48:43

+0

@LZW,這是我的課http://pastebin.com/KX2veyxe – Denis 2013-02-09 13:52:14

回答

6

您正在尋找這樣的:

var bytes = File.ReadAllBytes(@"yourpathtofile"); 

或者更類似:

 using (var filestream = File.Open(@"C:\apps\test.txt", FileMode.Open)) 
     using (var binaryStream = new BinaryReader(filestream)) 
     { 
      for (var i = 0; i < arraysize; i++) 
      { 
       Console.WriteLine(binaryStream.ReadInt32()); 
      } 
     } 

或者,一個小例子單元測試:

創建整數二進制文件.. 。

[Test] 
    public void WriteToBinaryFile() 
    { 
     var ints = new[] {1, 2, 3, 4, 5, 6, 7}; 

     using (var filestream = File.Create(@"c:\apps\test.bin")) 
     using (var binarystream = new BinaryWriter(filestream)) 
     { 
      foreach (var i in ints) 
      { 
       binarystream.Write(i); 
      } 
     } 
    } 

而從二進制文件

[Test] 
    public void ReadFromBinaryFile() 
    { 
     // Approach one 
     using (var filestream = File.Open(@"C:\apps\test.bin", FileMode.Open)) 
     using (var binaryStream = new BinaryReader(filestream)) 
     { 
      var pos = 0; 
      var length = (int)binaryStream.BaseStream.Length; 
      while (pos < length) 
      { 
       var integerFromFile = binaryStream.ReadInt32(); 
       pos += sizeof(int); 
      } 
     } 
    } 

從二進制文件

[Test] 
    public void ReadFromBinaryFile2() 
    { 
     // Approach two 
     using (var filestream = File.Open(@"C:\apps\test.bin", FileMode.Open)) 
     using (var binaryStream = new BinaryReader(filestream)) 
     { 
      while (binaryStream.PeekChar() != -1) 
      { 
       var integerFromFile = binaryStream.ReadInt32(); 
      } 
     } 
    } 
+0

+1,沒有注意到,他正在處理二進制文件(由於在問題標題中有'txt'擴展名和'int') – 2013-02-09 13:46:31

+0

@bas,我對數組大小的定義有問題(數組大小)。 – Denis 2013-02-09 14:02:57

+0

@Denis,我正在看一部電影atm,希望更新能夠幫到你。 Stefan還給出了第三個選項來迭代二進制文件'fs.Length/sizeof(int)' – bas 2013-02-09 15:39:40

1

閱讀我想說的其他方式的另一種方法的閱讀一個小例子測試。唯一的問題是,在閱讀它之前你不知道尺寸,所以先計算一下。哦,我會使用「使用」,以確保一切配置(和關閉)正確:

 int[] ll; 
     using (FileStream fs = File.OpenRead("image-text-16.txt")) 
     { 
      int numberEntries = fs.Length/sizeof(int); 
      using (BinaryReader br = new BinaryReader(fs)) 
      { 
       ll = new int[numberEntries]; 
       for (int i = 0; i < numberEntries; ++i) 
       { 
        ll[i] = br.ReadInt32(); 
       } 
      } 
     } 
     // ll is the result 

我真的不明白的是爲什麼你正在寫的LZW一個int [],但我想這是有原因的...

+0

他正在從LZW寫入「int []」,因爲當你聲明一個數組時,你必須包含數組的數據類型,這意味着數組的成員將保存數組的數據類型。 – Hailemariam 2016-11-23 11:57:01