3

数週間検索した後、私は自分の問題の解決策を見つけられないようです。私がやりたいのは、RichTextBoxでフォームを開き、ロードボタンを押して、.bin 検索するファイルをロードすることです。次に、ラジオボタンを使用してRichTextBoxでjpegまたはbmp&を選択し、すべてのjpegまたはbmpを表示します。画像ではなく、オフセット位置のみを表示します。

たとえば、ÿØÿàが開始するオフセットである「jpgfound at 0x00002311」、または「bmp found at 0x00009382」witchは、選択した.binファイルでBMが開始する場所です。

これが私がいるところです。1つbmpまたはjpegを見つけてカウントを表示しますが、オフセットは表示しません。すべての画像とオフセットを見つけるために必要です。

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

        }
    }
}
4

1 に答える 1

0

あなたが抱えている問題は、StreamReader.Readlineがバイナリデータではなくテキストを探していることです。

行は、一連の文字の後にライン フィード ("\n")、キャリッジ リターン ("\r")、またはキャリッジ リターンの直後にライン フィード ("\r\n") が続くものとして定義されます。

二分探索を行う必要があります。次から始めてみてください。

byte[] bytes = File.ReadAllBytes(dlgOpen.FileName);
于 2013-01-04T22:16:09.647 に答える