Hex aus Datei als neue Datei speichern

T

ThErEaLTBX

Ich hätte da ein kleines Problemchen und zwar ist das die derzeitige Suche.
Habe eine sehr schöne Source gefunden mit der ich in einer Datei Hexbytes einzeln aufrufen kann und dann speichern kann was dazwischen liegt.

Das Problem ist jetzt dies und zwar sind die Anfangsbytes immer gleich nur die Endbytes sind bei jeder Datei anders was ich nat. auch nicht vorher weiß. Und deshalb auch nicht definieren kann. Das Ende der gesuchten Bytes ist auch das Ende der Datei. Hoffe ihr versteht was ich meine. Das ist derzeit der Code zur eingabe des Startes und des Endes von dem was gesucht werden soll.

Start = Chr(HexToLong("78")) + Chr(HexToLong("DA")) + Chr(HexToLong("EC")) + Chr(HexToLong("FD"))
End = Chr(HexToLong("78")) + Chr(HexToLong("DA"))

Wobei die "Zahlen" Hexwerte sind nun das Problem da die letzten Bytes ja variabel sind und man das ja ned vorher weiß was da kommt müsste man ja eigendlich

jpgEnd = EOF (........)

eingeben nur weiß ich ned ganz wie er des macht das ich das bis zum Ende komme und er erst dann mir die Datei als neue Datei schreibt.

Hoffe ihr könnt mir weiterhelfen. Da ich noch recht Grün hinter den Ohren bin im Thema VB.

LG TBX
 
T

ThErEaLTBX

Keiner einen Lösungsvorschlag?

Wie sähe denn ein Code Bsp. aus um die letzten ich sach ma 10 Hexstellen einer
Datei herauszubekommen?

Test Datei =
0102170B140002000800B47EE738CBC7CE
20CFC80A009D580B0008001100000000000
0002000B68100000000646174612E7A69705
3440400BC0000005554050007E41F7248504
B050600000000010001004700000072C90A0
000000009E0FDFA63ACF194

Vllt, weiß das einer und kann mir damit helfen.
 

DrSoong

Iss was, Doc!
Visual Basic:
Dim sFile As String, sInhalt As String, iFile As Integer, sHex As String
sFile = "C:Beispiel.tx" 'Deine Textdatei
sInhalt = Space(FileLen(sFile)) 'Länge vorbelegen
iFile = FreeFile 'Nächste Freie Dateinummer
Open sFile For Binary Access Read As iFile 'Datei binär zum Lesen öffnen
 Get #iFile, , sInhalt 'und in einem Rutsch auslesen
Close iFile
sInhalt = RTrim(sInhalt) 'Leerzeichen danach abschneiden
sHex = Right(sInhalt, 10) 'die letzten 10 Zeichen auslesen


Der Doc!
 
T

ThErEaLTBX

Danke Doc aber
Code:
sFile = "C:Beispiel.tx" 'Deine Textdatei
Open sFile For Binary Access Read As iFile 'Datei binär zum Lesen öffnen

Habe ich ja schon in meiner anderen Declaration.
Oder Würfel ich grad alles durcheinander?

Das habe ich als Auswahl
Code:
Private Sub BtnExtract_Click()
If Dir(App.Path & "\Extr. Gif´s", vbDirectory) = "" Then MkDir (App.Path & "\Extr. Gif´s")
Log.Text = "irgendwas" + newline
Log.Text = Log.Text + "Gestartet ..." + newline
Log.Text = Log.Text + "Open File " + getname(Txtfile.Text) + newline
Log.Text = Log.Text + "Speichere Datei nach " + App.Path + "\Extr. Gif´s" + newline
If ChkJPG.Value = 1 Then Call ExtractFile(Txtfile.Text, jpgStart, jpgEnd2, ".jpg")
If ChkPDF.Value = 1 Then Call ExtractFile(Txtfile.Text, pdfStart, pdfend, ".gif")
If ChkPNG.Value = 1 Then Call ExtractFile(Txtfile.Text, pngStart, pngEnd, ".gif")
Log.Text = Log.Text + "Fertig " + newline
Log.Text = Log.Text + "Dateien ordnungsgemäß gespeichert" + newline
End Sub


Private Sub Form_Load()
newline = Chr(13) + Chr(10)
jpgStart = Chr(HexToLong("78")) + Chr(HexToLong("DA")) + Chr(HexToLong("EC")) + Chr(HexToLong("FD"))

jpgEnd = HIER MÜSSTEN SICH JETZT DIE LETZEN 10  BYTES VON SELBST EINTRAGEN :-)

pdfStart = Chr(HexToLong("47")) + Chr(HexToLong("49")) + Chr(HexToLong("46"))
pdfend = Chr(HexToLong("00")) + Chr(HexToLong("3B"))
pngStart = Chr(HexToLong("47")) + Chr(HexToLong("49")) + Chr(HexToLong("46"))
pngEnd = Chr(HexToLong("00")) + Chr(HexToLong("3B")) + Chr(HexToLong("47"))
EnableDragDrop Txtfile.hwnd
If Dir(App.Path & "\Extr. Gif´s", vbDirectory) = "" Then MkDir (App.Path & "\Extr. Gif´s")
If Dir(App.Path & "\extrae.dll") = "" Then Call ExtDLL
App.Title = "extrae"
End Sub


Und das ist meine .bas
Code:
Public newline As String
Public Function Justname(ByVal name As String) As String
Justname = Mid(name, InStrRev(name, "\", -1) + 1, InStrRev(name, ".", -1) - InStrRev(name, "\", -1) - 1)
End Function


Public Function getname(ByVal name As String) As String
getname = Right(name, Len(name) - InStrRev(name, "\", -1))
End Function

Public Sub ExtDLL()
Dim Buffer() As Byte
Buffer = LoadResData(101, "MOD")
Open App.Path & "\bass.dll" For Binary As #1
 Put #1, , Buffer()
Close #1
End Sub
Public Function ExtractFile(ByVal filename As String, startmark As String, endmark As String, ext As String)
Dim pos1, pos2 As Long
Dim varfile As String
Dim varrest As String
Dim ExtractOutput() As Byte
Dim i As Long
i = 0
pos2 = 1
pos1 = 1



Open filename For Binary As 1
 varfile = String(LOF(1), " ")
  varrest = String(LOF(1), " ")
  Do
  i = i + 1

 Get #1, 1, varfile
 pos1 = InStr(pos2, varfile, startmark)
 If pos1 = 0 Then Exit Do
 pos2 = InStr(pos1, varfile, endmark)

 
If pos2 - pos1 + Len(endmark) - 1 < 0 Then
Beep
Exit Do
End If

ReDim ExtractOutput(pos2 - pos1 + Len(endmark) - 1) As Byte
 
 Get #1, pos1, ExtractOutput


 Open App.Path + "\Extr. Gif´s\" & Justname(filename) & "(" & Val(i) & ")" & ext For Binary As 2
   Put #2, , ExtractOutput
    
 Close #2
 FrmMain.Log.Text = FrmMain.Log.Text + Justname(filename) & "(" & Val(i) & ")" & ext + newline
  DoEvents

 Loop Until pos1 = 0
Close #1


End Function
Public Function HexToLong(ByVal sHex As String) As Long
        HexToLong = Val("&H" & sHex & "&")
End Function