如何使用BinaryWriter进行写入和读取?

时间:2012-12-13 04:47:35

标签: c#

我在编写二进制文件时有这个代码:

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]);

但第一件事是我怎么能写出所有这些并在文件中使它自己被字符串或其他东西识别所以当我正在阅读文件时我将能够将每个List放到一个新的?

第二件事是我现在如何回读文件,以便将每个List添加到新列表中? 现在很容易编写一个List读取并将其添加到List中。 但是现在我添加了更多三个列表,所以我该怎么做呢?

感谢。

1 个答案:

答案 0 :(得分: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.