大家好,
我有以下结构:
public struct IncomeTax
{
public string name, category;
public int income;
}
我正在写一个不。使用以下代码将二进制格式的结构(记录)转换为文本文件:
FileStream fs = new FileStream(Application.StartupPath + "\\Hello.txt", FileMode.Append, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(it.name);
bw.Write(it.category);
bw.Write(it.income);
bw.close();
fs.close();
现在,我想从这个文件中随机读取记录,说我想直接转到第3条记录。我知道可以使用BinaryReader
& FileStream.Seek
。但我不知道如何使用FileStream.Seek
直接转到任何记录。请帮忙。
答案 0 :(得分:6)
你不能,凭借你所拥有的结构 - 记录可以是任何大小。为了寻找任意记录,要么需要具有固定大小的记录(这意味着对name
和category
字符串的大小有一些限制,然后用空格填充记录,如果它们小于那个限制)或你需要建立一个单独的索引,这基本上是固定大小的记录,说“记录X从位置开始Y”。
请注意,后一种方法使编辑记录变得棘手,因为除非新版本与旧版本完全相同,否则您需要将其保留在原位但“浪费”一些空间在记录的末尾,或在文件末尾创建一个新记录。
或您可以使用数据库,这几乎肯定是一个更好的主意。有各种形式的“嵌入式”数据库,这意味着您不需要客户端 - 服务器配置,只需要一个或两个数据库内容。