3 Stimmen

bmp in einer .bin-Datei finden

Nach wochenlanger Suche scheine ich keine Lösung für mein Problem gefunden zu haben. Was ich tun möchte, ist ein Formular mit einer RichTextBox öffnen, drücken Sie eine Schaltfläche laden und laden Sie eine .bin Datei zu suchen. Wählen Sie dann über eine Optionsschaltfläche entweder jpeg o bmp & in der RichTextBox alle jpeg's oder bmp's anzeigen - nicht die Bilder, nur die Offsetpositionen.

Zum Beispiel "jpg gefunden bei 0x00002311", das ist der Offset, an dem ÿØÿà beginnt, oder "bmp gefunden bei 0x00009382", das ist die Stelle, an der BM im ausgewählten .bin Datei.

So sieht es bei mir aus: Es findet eine bmp o jpeg und zeigt eine Zählung, aber nicht den Versatz an. Ich brauche es, um alle Bilder und Offsets zu finden.

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

        }
    }
}

0voto

Chris Ayers Punkte 49

Das Problem, das Sie haben, ist, dass StreamReader.Readline sucht nach Text und nicht nach binären Daten.

Eine Zeile ist definiert als eine Folge von Zeichen, gefolgt von einem Zeilenvorschub (" \n "), ein Wagenrücklauf (" \r "), oder ein Wagenrücklauf unmittelbar gefolgt von einem Zeilenvorschub (" \r\n ").

Sie müssen eine binäre Suche durchführen. Versuchen Sie, mit zu beginnen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X