在c#中搜索文本文件?

时间:2017-04-29 16:14:05

标签: c# binaryfiles

我正在尝试在使用BinaryWriter编写的文本文件中进行搜索,并且必须输入id

我想在TextBox中搜索,然后搜索它但问题是我必须输入相同的ID顺序才能搜索 例如假设我有3条ID为1,2,3的记录 如果我输入1,它将在文本框中显示它的数据 然后,如果我输入3,它将在文本框中显示它的数据 但当我输入2时,它将显示异常(Unable to read beyond the end of the stream

这是我在文本文件中搜索的代码,并以表格形式显示文本框中的其余数据(记录大小= 35

        BinaryReader br = new BinaryReader(File.Open("D:\\File.txt", 
      FileMode.Open, FileAccess.Read));
        int num_records = (int)br.BaseStream.Length / Class1.rec_size;

        int x = int.Parse(textBox2.Text);
        for (int i = 0; i < num_records; i++)
        {
            br.BaseStream.Seek(Class1.count, SeekOrigin.Begin);
            if (int.Parse(br.ReadString()) == x)
            {
                // textBox2.Text = int.Parse(br.ReadString()).ToString();
                textBox3.Text = br.ReadString();
                textBox4.Text = br.ReadString();
                textBox5.Text = int.Parse(br.ReadString()).ToString();
                textBox6.Text = br.ReadString();


                break;
            }

            Class1.count += Class1.rec_size;
        }

        br.Close();
    }

1 个答案:

答案 0 :(得分:1)

您似乎忘了重置Class1.Count。

在您的代码行中:         br.BaseStream.Seek(Class1.count, SeekOrigin.Begin); 您有一个Class1.Count的偏移量。由于在每条记录的末尾添加了偏移Class1.count += Class1.rec_size;,因此您只会向上搜索流,这就是它在有序搜索中成功的原因。

您需要为每次搜索重置此计数器,以便再次从流的开头开始。