Если вы гибко относитесь к тому, как пишется файл данных, и не возражаете против того, чтобы он был немного менее удобен для редактирования текстов, вы можете написать свои записи с помощью BinaryWriter:
using (BinaryWriter writer =
new BinaryWriter(File.Open("data.txt", FileMode.Create)))
{
writer.Write("one,1,1,1,1");
writer.Write("two,2,2,2,2");
writer.Write("three,3,3,3,3");
}
Тогда первоначальное чтение каждой записи просто, потому что вы можете использовать метод ReadString в BinaryReader:
using (BinaryReader reader = new BinaryReader(File.OpenRead("data.txt")))
{
string line = null;
long position = reader.BaseStream.Position;
while (reader.PeekChar() > -1)
{
line = reader.ReadString();
//parse the name out of the line here...
Console.WriteLine("{0},{1}", position, line);
position = reader.BaseStream.Position;
}
}
BinaryReader не буферизуется, поэтому вы получаете правильную позицию для хранения и использования позже. Единственная проблема - это разбор имени вне строки, который вам, возможно, все равно придется делать с StreamReader.