在.bin文件中找到bmp

时间:2012-12-25 00:54:47

标签: c# search header offset

经过几周的搜索,我似乎无法找到解决问题的方法。我想要做的是打开一个包含RichTextBox的表单,按下加载按钮并加载.bin 要搜索的文件。然后,使用单选按钮选择jpegbmp&在RichTextBox中,显示所有jpeg或bmp - 而不是图像,只显示偏移位置。

例如,“jpg found at 0x00002311”,这是ÿØÿà开始的偏移,或者“bmp found at 0x00009382”,这是BM在选定的.bin文件中启动的地方。

这就是我所处的位置:它找到一个bmpjpeg并显示一个计数,但不显示偏移量。我需要它来查找所有图像和偏移。

private void button7_Click(object sender, EventArgs e)
{
    using (OpenFileDialog dlgOpen = new OpenFileDialog())
    {
       try
        {
            long count = 0; string line;
            List<String> LinesFound = new List<string>();
            dlgOpen.Filter = "All files(*.*)|*.*";
            dlgOpen.InitialDirectory = "C://bin";
            dlgOpen.Title = "Load";

            if (dlgOpen.ShowDialog() == DialogResult.OK)
                textBox5.Text = dlgOpen.FileName;
            {
                var sr = new StreamReader(dlgOpen.FileName, Encoding.Default);

                while ((line = sr.ReadLine()) != null)
                {
                    if (line.Contains("ÿØÿà"))
                        richTextBox1.Text = ("JPEG Found at address") + count++;
                    else if (line.Contains("BM"))
                        richTextBox1.Text = ("BMP Found at address") + count++;
                }
             }
          }
            catch (Exception)
            {
                MessageBox.Show("error in reading file");

        }
    }
}

1 个答案:

答案 0 :(得分:0)

您遇到的问题是StreamReader.Readline正在查找文本而不是二进制数据。

一行被定义为字符序列,后跟换行符(“\ n”),回车符(“\ r”)或回车符后紧跟换行符号(“\ r \ nn “)。

您需要进行二分搜索。尝试从:

开始
byte[] bytes = File.ReadAllBytes(dlgOpen.FileName);