Ich habe im Forum und in André Beer seinem CodeArchiv gesucht....
Gefunden habe ich eine alte Routine (von Sylvia) die sich unter PB 3.93 nicht mehr Kompilieren ließ.
So habe ich eine neue Routine geschrieben.
Die benutzt die neue Memory Library von Deeem2031
Der neue CompareMemory() Befehl vergleicht den Speicher, long-weise. Und wenn ein paar Bytes übrig bleiben werden die extra getestet.
Kopier http://www.deeem2031.de/Memory in den ../Purebasic/PureLibraries-Ordner.
[Edit]
Kiffi hat mich auf folgende Fehler aufmersam gemacht die ich gefixt habe:
Flüchtigkeitsfehler:
[...]
; Datei 2 in den Speicher lesen
*MemoryID2 = AllocateMemory(FS1)
If *MemoryID2 = 0 : ProcedureReturn -1 : EndIf ; Nicht genug Speicher
[...]
Danke Kiffiausserdem sollte der Rückgabewert von ReadFile immer ausgewertet werden.
[/Edit]
Code: Alles auswählen
; ------------------------------------------------------------
; Compare File by Pamkkkkk
; Compares two Files Binary
; It use the new Memory Library from Deeem2031
; get it under:
; www.deeem2031.de/Memory (Memorylib)
; www.deeem2031.de/Math (Mathlib)
; PB 3.93 16.Juli 2005
; ------------------------------------------------------------
Procedure.b FileCompare(Pfad1.s,Pfad2.s)
;Vergleicht Zwei Dateien Byteweise (Memorylib von deeem2031)
; Return 1 = Dateien sind gleich
; Return 0 = Dateien sind ungleich
; Return -1 = Nicht genug Speicher zum vergleich oder Fehler aufgetreten
FS1 = FileSize(Pfad1)
FS2 = FileSize(Pfad2)
If FS1 <> FS2 : ProcedureReturn 0 : EndIf ; Dateien haben verschiedenen Grössen sind also ungleich
If FS1 = 0 And FS2 = 0 : ProcedureReturn 1 : EndIf ; 0 Byte Dateien sind immer gleich!
; Datei 1 in den Speicher lesen
*MemoryID1 = AllocateMemory(FS1)
If *MemoryID1 = 0 : ProcedureReturn -1 : EndIf ; Nicht genug Speicher
File1 = ReadFile(#PB_Any, Pfad1)
If File1 = 0 : ProcedureReturn -1 : EndIf ; Datei 1 konnte nicht gelesen werden
ReadData(*MemoryID1, FS1)
CloseFile(File1)
; Datei 2 in den Speicher lesen
*MemoryID2 = AllocateMemory(FS1)
If *MemoryID2 = 0 : ProcedureReturn -1 : EndIf ; Nicht genug Speicher
File2 = ReadFile(#PB_Any, Pfad2)
If File2 = 0 : ProcedureReturn -1 : EndIf ; Datei 1 konnte nicht gelesen werden
ReadData(*MemoryID2, FS1)
CloseFile(File2)
; Dateien vergleichen und Speicher frei geben
result.b = CompareMemory(*MemoryID1, *MemoryID2, FS1) ;New Memory Lib from deeem2031 !!!
FreeMemory(*MemoryID1)
FreeMemory(*MemoryID2)
ProcedureReturn result
EndProcedure
kopier http://www.deeem2031.de/Math in den ../Purebasic/PureLibraries-Ordner.