从二进制文件中随机读取结构

时间:2012-10-13 07:29:50

标签: c# file random struct binary

大家好,

我有以下结构:

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直接转到任何记录。请帮忙。

1 个答案:

答案 0 :(得分:6)

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

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

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