2

大家好,

我有以下结构:

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

现在,我想从这个文件中随机读取记录,比如说我想直接去第三条记录。我知道这可以使用BinaryReader&来完成FileStream.Seek。但我不知道如何使用FileStream.Seek直接转到任何记录。请帮忙。

4

1 回答 1

6

你不能,用你所拥有的结构——记录可以是任何大小。为了寻找任意记录,您要么需要具有固定大小的记录(这意味着对您的namecategory字符串的大小有一些限制,然后如果记录小于该限制,则用空白空间填充记录)或者你需要建立一个单独的索引,它基本上是固定大小的记录,说“记录 X 从位置 Y 开始”。

请注意,后一种方法使编辑记录变得棘手,因为除非新版本与旧版本的大小完全相同,否则您要么需要将其保留在原位,但在记录末尾“浪费”一些空间,要么创建一个文件末尾的新记录。

或者您可以只使用数据库,这几乎肯定是一个更好的主意。有多种形式的“嵌入式”数据库,这意味着您不需要客户端-服务器配置,只需一两个文件用于数据库内容。

于 2012-10-13T07:35:14.040 回答