我有一个包含书籍列表的书籍收藏。我创建了一个二进制文件并将这些数据写入其中。记录没有问题,文件已创建并包含我输入的所有数据。问题是,如何正确地从二进制文件中读取这些数据以便我可以查看它?
// Если файла не существует, то создаем
if (!File.Exists(_path + "\\Books.bin"))
{
_books.Add(new Books
{
BookName = "Книга 1",
Author = "Автор 1",
PageCount = 200,
Year = 2000
});
_books.Add(new Books
{
BookName = "Книга 2",
Author = "Автор 2",
PageCount = 400,
Year = 2010
});
_books.Add(new Books
{
BookName = "Книга 3",
Author = "Автор 3",
PageCount = 820,
Year = 2005
});
using (var fileStream = new FileStream(_path + "\\Books.bin", FileMode.Create))
{
using (BinaryWriter writer = new BinaryWriter(fileStream))
{
foreach (var book in _books)
{
writer.Write(book.BookName);
writer.Write(book.Author);
writer.Write(book.PageCount);
writer.Write(book.Year);
}
writer.Close();
}
}
}
// Читаем файл
using (BinaryReader reader = new BinaryReader(File.Open(_path + "\\Books.bin", FileMode.Open)))
{
}
在@Rekssel 的回答中,使用 check 停止阅读
PeekChar()。两种普遍接受的方式之一:我们阅读直到遇到结束标记。另一种方式:一开始我们写下数据的长度。分别在阅读的时候,我们先阅读这个长度。
这种方法的缺点是,在写的时候,需要知道数据的长度,而这个并不总是知道的,比如我们有一个数据源
IEnumerable或者IQueryable.这种方法的好处是,在读取的时候,可以立即分配一个想要长度的缓冲区。在这种情况下,将来不会有不必要的重新分配。
使用BinaryFormatter。
例如:
作为记录:
阅读:
我猜是这样的:
或者像这样: