1

私はSortedListを持っており、キーはContact.nameで、値はオブジェクトContactです。BinaryWriterを使用してこのリストをファイルに書き込んでいますが、問題はありませんが、このリストを読み、その後、特定の連絡先を探します。やり方がわかりません。ファイルを読んで連絡先を探す必要があると思いますが、ファイルに保存されているバイナリコードをSortedListに入力するにはどうすればよいですか?

4

2 に答える 2

1

バイナリファイルからの読み取りと書き込みの両方を行う方法の簡単な例を次に示します。

static void Main(string[] args)
    {

        WriteContacts(new List<Contact>( new []{ new Contact { ID = 1, Name = "Juan", Age = 34 }, new Contact { Name = "Pedro", Age = 23, ID = 2 } }));
        FindContactInFile("Juan");
        FindContactInFile("Mario");
        Console.ReadKey();
    }

    private static void FindContactInFile(string name)
    {
        IFormatter formatter = new BinaryFormatter();

        using (Stream s = new FileStream("contacts.bin", FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            var contacts = (List<Contact>)formatter.Deserialize(s);
            var person  = contacts.Where(x=>x.Name==name).FirstOrDefault();
            if (person != null)
                Console.WriteLine("Persona encontrada: {0}", person.Name);
            else
                Console.WriteLine("{0} no fue encontrado en el archivo.", name);
        }
    }

    private static void WriteContacts(List<Contact> contacts)
    {
        IFormatter formatter = new BinaryFormatter();
        using (Stream s = new FileStream("contacts.bin", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            formatter.Serialize(s, contacts);
        }
    }
}
[Serializable]
class Contact
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

誰かを検索するたびにファイル全体を読み取らないなど、多くの点を改善できます。または、最初からファイル全体を一度に読み取らないでください...いずれにせよ、ここでの重要な概念は、バイナリファイルに何かを格納するには、オブジェクトをシリアル化する必要があるということです。このために、.NETによって提供されるBinaryFormatterの1つを使用でき(上記で行ったように)、ファイルから読み戻すには、単に反対のことを行います。

于 2013-02-28T16:39:10.420 に答える
1

あなたが望むように聞こえBinaryReaderますが、ファイル出力をBinaryWriter元のタイプから取得して逆シリアル化します。

これは、msdnで両方を使用する良い例です。

于 2013-02-28T16:29:21.890 に答える