2012-12-13 51 views
1

我有寫一個二進制文件時,該代碼至極工作:如何使用BinaryWriter進行書寫和閱讀?

using (BinaryWriter binWriter = 
           new BinaryWriter(File.Open(f.fileName, FileMode.Create))) 
          { 
           for (int i = 0; i < f.histogramValueList.Count; i++) 
           { 

            binWriter.Write(f.histogramValueList[(int)i]); 



           } 
           binWriter.Close(); 
          } 

而這個代碼從硬盤上的DAT文件回讀:

fileName = Options_DB.get_histogramFileDirectory(); 
      if (File.Exists(fileName)) 
      { 
       BinaryReader binReader = 
        new BinaryReader(File.Open(fileName, FileMode.Open)); 
       try 
       { 
        //byte[] testArray = new byte[3]; 
        int pos = 0; 
        int length = (int)binReader.BaseStream.Length; 

        binReader.BaseStream.Seek(0, SeekOrigin.Begin); 

        while (pos < length) 
        { 
         long[] l = new long[256]; 

         for (int i = 0; i < 256; i++) 
         { 
          if (pos < length) 
           l[i] = binReader.ReadInt64(); 
          else 
           break; 

          pos += sizeof(Int64); 
         } 
         list_of_histograms.Add(l); 
        } 
       } 

       catch 
       { 
       } 
       finally 
       { 
        binReader.Close(); 
       } 

但我想做的事是添加到編寫代碼寫入到文件的更多三流是這樣的:

binWriter.Write(f.histogramValueList[(int)i]); 
binWriter.Write(f.histogramValueListR[(int)i]); 
binWriter.Write(f.histogramValueListG[(int)i]); 
binWriter.Write(f.histogramValueListB[(int)i]); 

但第一件事情是我可以寫這一切,並使其在文件中它自我被識別的字符串或東西,所以當即時通訊閱讀文件後,我將能夠把每個列表一個新的?

第二件事是我如何讀迴文件現在每個列表將被添加到一個新的列表? 現在很容易編寫一個列表讀取並將其添加到列表。 但現在我增加了三個列表,所以我該怎麼做呢?

謝謝。

+0

寫作,當你需要與第三方系統,設備或驅動程序進行交互閱讀這樣真的是隻適用。如果您只想保留一組列表,爲什麼不使用二進制序列化?您可以給它一個包含適用列表的對象,甚至可以列出一個列表。查看'BinaryFormatter'獲取更多信息。 –

回答

2

爲了得到答案想想如何獲取您剛剛序列化的列表中的項目數。

作弊碼:寫入項目之前的項目數量。當閱讀做反向時。

writer.Write(items.Count()); 
// write items.Count() items. 

閱讀:

int count = reader.ReadInt32(); 
items = new List<ItemType>(); 
// read count item objects and add to items collection.