Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan > Spezielles

Spezielles Für die Bereiche API, Subclassing, Inline-Assembler, Prozesse, ect.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26915, Antworten: 4218
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3326, Antworten: 122
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 312, Antworten: 19
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7643, Antworten: 185
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 20, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 23, Antworten: 0
Gehe zum ersten neuen Beitrag Acer Aspire 8745ZG fährt...
Aufrufe: 58, Antworten: 6
Gehe zum ersten neuen Beitrag Rechner fährt herunter,...
Aufrufe: 146, Antworten: 9
Gehe zum ersten neuen Beitrag avs4you_com Lizenz oder Abo?
Aufrufe: 71, Antworten: 4
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50944, Antworten: 1395
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14.01.2011, 15:16   #1 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

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
Frabbing ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 14.01.2011, 22:33   #2 (Direktlink)
Dauergast
 
Benutzerbild von p. specht
 
Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.079
Standard

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)
p. specht ist offline   Mit Zitat antworten
Alt 14.01.2011, 23:01   #3 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Genau.
ShlWapi ist eine System-Dll ähnlich Kernel32 oder User32.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 14.01.2011, 23:13   #4 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Zitat:
Zitat von Frabbing Beitrag anzeigen
Genau.
ShlWapi ist eine System-Dll ähnlich Kernel32 oder User32.
Wobei 50% der Functionen nur Wrapper auf andere APIs sind, warum auch
immer
ts-soft ist offline   Mit Zitat antworten
Alt 14.01.2011, 23:57   #5 (Direktlink)
Dauergast
 
Benutzerbild von p. specht
 
Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.079
Standard

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
p. specht ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 15.01.2011, 00:00   #6 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Zitat:
Zitat von p. specht Beitrag anzeigen
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?
So sieht es aus .

Def ...(4) "...", "..."

Let me google that for you
ts-soft ist offline   Mit Zitat antworten
Alt 15.01.2011, 00:17   #7 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Zitat:
Zitat von ts-soft Beitrag anzeigen
Wobei 50% der Functionen nur Wrapper auf andere APIs sind, warum auch
immer
Sie wrappt nur nach UrlHashA().
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 15.01.2011, 00:20   #8 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Zitat:
Zitat von p. specht Beitrag anzeigen
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?
Peter, du kannst die Funktion ganz normal wie jede andere API benutzen. Am besten Dll laden und Funktion definieren oder importieren. Die Definition ist:

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)
Frabbing ist offline   Mit Zitat antworten
Alt 15.01.2011, 00:50   #9 (Direktlink)
Dauergast
 
Benutzerbild von p. specht
 
Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.079
Standard

Ah... danke!
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3
p. specht ist offline   Mit Zitat antworten
Alt 15.01.2011, 09:42   #10 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

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
Dann ist das nur für kleinere Dateien geeignet. Bei großen Dateien ist es speicherabhängig, ob es funktioniert. Denn es kommt dann die Meldung, dass der Speicher nicht ausreicht. Schon so um die 100 MB wird es schon etwas zu langsam. Oder mache ich was falsch ?
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 15.01.2011, 12:04   #11 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

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.
Frabbing ist offline   Mit Zitat antworten
Alt 15.01.2011, 12:35   #12 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

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
Bangkok ist offline   Mit Zitat antworten
Alt 15.01.2011, 13:28   #13 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

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.
Frabbing ist offline   Mit Zitat antworten
Alt 15.01.2011, 20:37   #14 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard

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
Jac de Lad ist offline   Mit Zitat antworten
Alt 19.01.2011, 16:47   #15 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Zitat:
Zitat von Bangkok Beitrag anzeigen
Dann ist das nur für kleinere Dateien geeignet.
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
AHT ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan > Spezielles

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ä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



Alle Zeitangaben in WEZ +2. Es ist jetzt 06:08 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2