1

バイナリファイルを書き込むときに機能するこのコードがあります:

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();
                }

しかし、私がやりたいことは、書き込みコードに追加して、次のような 3 つのストリームをファイルに書き込むことです。

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

しかし、最初のことは、どのようにこれらすべてを書き込んでファイルに作成し、文字列などで識別できるようにするので、ファイルを読み返すときに、各リストを新しいリストに入れることができますか?

2 つ目は、各リストが新しいリストに追加されるように、ファイルを読み戻す方法です。これで、1 つの List 読み取りを作成し、それを List に追加するのは簡単です。しかし、今、さらに3つのリストを追加したので、どうすればいいですか?

ありがとう。

4

1 に答える 1

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.
于 2012-12-13T04:56:55.777 に答える