![]() |
Anzeige:
|
|
|||||||
| Spezielles Für die Bereiche API, Subclassing, Inline-Assembler, Prozesse, ect. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Die API HashData() aus der ShlWapi arbeitet zuverlässing und sehr schnell. Zum Vergleich zweier Dateien reicht mir ein 32 Bit-Hashwert (also der Inhalt eines LongInts) völlig aus, womit ich dann sehr schnell und komfortabel vergleichen kann. Nehme ich eine 64 Bit-Fliesskomma, ist es noch sicherer.
Die Funktion kann jedoch noch bis zu 1024 Bit Hash-Werten umgehen. Schon klasse, und gar nicht aufwendig. HashData(DateiImSpeicher#, GroesseDatei&, Addr(Hash&), 4) Print Hash& 'Hashwert als 32 Bit Testcode: Code:
Declare Datei#,hash&,file$,size&,ticks& Def HashData(4) ! "Shlwapi","HashData" Cls file$ = LoadFile$(%Hwnd,"Datei öffnen","*.*",0) If file$<>"" size& = FileSize(file$) Dim datei#,size& Blockread(file$,datei#,0,size&) Print "Starte Berechnung..." ticks& = &GetTickCount HashData(Datei#,size&,Addr(Hash&),4) Print "Dateiname: " + file$ Print "Dateigröße (MB): "+ Str$(size&/1048576) Print "Verarbeitungsdauer (ms): " + Str$(Int(&GetTickCount-ticks&)) Print "Errechneter 32-Bit Hashwert:" + Str$(Hash&) Dispose datei# EndIf WaitInput
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. Geändert von Frabbing (15.01.2011 um 12:15 Uhr) Grund: Testcode hinzugefügt |
|
|
|
|
|
|
#2 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.079
|
ShlWapi ? Ach so, ein augegliederter Hinweis aus dem Themenzweig "Verlaufsanzeige"...
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 Geändert von p. specht (14.01.2011 um 22:48 Uhr) |
|
|
|
|
|
#3 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Genau.
ShlWapi ist eine System-Dll ähnlich Kernel32 oder User32.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#4 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
|
|
|
|
|
|
|
#5 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.079
|
Irgendwas fehlt mir noch an Info... HashData() ist offenbar ein Funktion innerhalb der ShlWapi.DLL, oder? Muss ich die vorher laden, oder Windows.h einbinden oder wie?
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
|
#6 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
|
Zitat:
Def ...(4) "...", "..." Let me google that for you |
|
|
|
|
|
|
#7 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Sie wrappt nur nach UrlHashA().
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#8 (Direktlink) | |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Zitat:
Def HashData(4) !"shlwapi","HashData"
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. Geändert von Frabbing (15.01.2011 um 00:31 Uhr) |
|
|
|
|
|
|
#9 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.079
|
Ah... danke!
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
#10 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
ich gehe mal davon aus, dass diese Vorgehensweise die richtige ist.
Code:
Def HashData(4) ! "Shlwapi","HashData" Declare Datei#,hash& CLS Var file$ = Loadfile$(%Hwnd,"Datei öffnen","*.*",0) Var int64 size = filesize(file$) Dim datei#,size Blockread(file$,datei#,0,size) HashData(Datei#,size,Addr(Hash&),4) Print Hash& 'Hashwert als 32 Bit dispose datei# waitinput
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
|
#11 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Die Vorgehensweise ist richtig.
Ein Abbruch mangels Speicher hab ich jetzt nicht erzeugen können. Richtig ist aber, dass die Funktion nicht für Riesendateien geschaffen wurde. Die Datei muß sich ja innerhalb des Speichers befinden und wird nicht auf Platte verarbeitet. HashData() ist dazu gedacht, Hashsummen von Strings zu erzeugen, und dazu ist sie ideal. Strings jenseits der 100 MB-Marke sind eben selten. Die Schnelligkeit ist in Ordnung, finde ich. Eine Summe aus einem 100 MB Speicher in 2 Sekunden ist doch gar nicht schlecht. Da dauert das Laden mit BlockRead länger. 60 KB Daten werden in 16 ms verarbeitet. Damit kann man doch leben. Hab dein Beispiel mal für kleine XProfan-Versionen erweitert: Code:
Declare Datei#,hash&,file$,size&,ticks& Def HashData(4) ! "Shlwapi","HashData" Cls file$ = LoadFile$(%Hwnd,"Datei öffnen","*.*",0) If file$<>"" size& = FileSize(file$) Dim datei#,size& Blockread(file$,datei#,0,size&) Print "Starte Berechnung..." ticks& = &GetTickCount HashData(Datei#,size&,Addr(Hash&),4) Print "Dateiname: " + file$ Print "Dateigröße (MB): "+ Str$(size&/1048576) Print "Verarbeitungsdauer (ms): " + Str$(Int(&GetTickCount-ticks&)) Print "Errechneter 32-Bit Hashwert:" + Str$(Hash&) Dispose datei# EndIf WaitInput
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#12 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Ja du hast recht, ich habe das Blockread nicht raus genommen und das dauert auch, für eine Datei von 141 MB braucht die Berechnung 1158 ms. Die Speicherknappheit geht bei mir im Moment auf jeden Fall bei über 1 GB los. Ich habe einen Film mit 1,5 GB getestet, das war zu groß. Ich habe im Augenblick auch nur 2 GB Speicher, da bei mir ein Riegel kaputt ist.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
#13 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Also im Zweifelsfall vorher den Speicherstand überprüfen. wenn es denn wirklich so große Dateien sein sollen, die man berechnen möchte. Aber ist ja bei allen Dingen so, die viel Speicher benötigen.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#14 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Versucht mal die: bloody random - XProfan (siehe hashes.dll)
Ich weiß aber nicht, ob die DLL in punkto Performanz und Dateigröße mithalten kann.
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#15 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Erzeugungen von Hashes brauchen insgesammt lange. Bei Erzeugung von MD5 Hashes gibt es deshalb die Möglichkeit, die Datei aufzuteilen, Hab eine PCU gebastelt, die auch mit größeren Dateien zurechtkommen sollte.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Nach Unicode Strings in Dateien suchen | AHT | Software - Allgemein | 0 | 10.05.2010 16:08 |
| EXE Dateien erstellen | RedShark | Visual Basic, Visual Basic.NET | 8 | 02.06.2007 16:21 |
| PDF-Dateien erstellen | Karsten | Software - Allgemein | 3 | 07.08.2006 15:45 |
| BIN und andere Dateien in AVI oder MPEG Dateien umwandeln | Sky1986 | Allgemein | 7 | 28.01.2006 21:45 |
| .pot-Dateien erstellen | Anna | Software - Allgemein | 2 | 19.08.2002 19:24 |