Dupe Files - Preview Screenshots
29. Aug 2008 21:07 (bearbeiten)

Ich arbeite gerade wieder an einem meiner Lieblings-Projekte "Dupe Files". Ein Projekt, das ich leider vor langer Zeit unvollständig liegen gelassen habe. Die letzte lauffähige Dupe Files Version stammt von 2005 und wurde von mir noch unter Delphi entwickelt.
Die aktuelle Version entwickle ich stattdessen unter Visual Basic .NET, da ich beruflich nun viel mit dieser Sprache zu tun habe. In der ersten Testversion hatte ich leichte Geschwindigkeitsprobleme bei mehreren 10.000 Dateien. Hinzu kommt, dass das Klassendesign nicht besonders gut gewählt war.
Etwa 3 Jahre und wesentlich mehr Erfahrung später läuft nun auch die neue .NET Version so schnell (wenn nicht schneller) wie die alte Delphi Version (hier kann die letzte alte Version heruntergeladen werden).
Hier einige Screenshots. Bis zur fertigen Version dauert es allerdings noch etwas...


Wie man sieht zeigt Dupe Files nun nur noch Duplikat-Dateien an. Alle anderen werden der Übersicht und der Performance wegen gar nicht erst angezeigt. Ich dachte, was soll der Benutzer mit Dateien anfangen, die gar nicht doppelt sind? Also weg damit...
Außerdem experimentiere ich gerade mit ListViewGroups zur gruppierten Darstellung der Einträge. Über die Bezeichnungen (Small, Medium, Large, Huge) bin ich aber noch nicht ganz glücklich.
Max Payne Poster
29. Aug 2008 20:47 (bearbeiten)
Nachdem ich nun einige Mark Wahlberg Filme gesehen habe, in denen er ziemlich gut gespielt hat (Shooter, The Happening) , bin ich doch positiv auf die Erscheinung von Max Payne gestimmt.
Und die Poster sehen auch ziemlich gut aus, obwohl sie mich etwas zu sehr an den Stil von Sin City erinnern...


One condition: i drive my own car
25. Aug 2008 16:28 (bearbeiten)
Alle Jason Statham und Transporter Fans können gespannt sein. Im November 2008 kommt der dritte Teil der Reihe in die Kinos. Mit dabei ist Robert Knepper, bekannt aus Prison Break und Hitman.

Hier gehts zum Trailer.
VB .NET: Advanced logging method
24. Aug 2008 20:39 (bearbeiten)
The following function adds aMessage to the applications DefaultLogWriter. The DefaultLogWriter is a nice little feature included in Visual Basic .NET which allows you to automatically create a log file in the "Documents and Settings" folder of your application to which you can add your log entries via WriteLine(aMessage).
The function below also adds some more information to the log entry itself. It adds the current date and time and also retrieves the calling method from stack, which can be useful for tracking down a bug (thanks go out to skybound.ca for his help here).
The output could look like this:
"23.08.2008 16:15:43 : CreateListViewItem : Added new item"
Public Shared Sub AddToLog(ByVal aMessage As String) If Not My.Settings.Logging Then Exit Sub Dim nle As String ' new list entry Dim acn As String ' A caller name ' if logging of stack is enabled put together some info ' note: i put this as an option to the application.settings because when adding many entries to the log you might want to speed up things a bit by disabling logging the stack info If My.Settings.LogStack Then Dim sf As System.Diagnostics.StackFrame ' the calling method is always frame 1 of the call stack (the current method is frame 0) sf = New System.Diagnostics.StackTrace().GetFrame(1) acn = sf.GetMethod.ReflectedType.Name & "." & sf.GetMethod.Name Else acn = "" End If ' setup log string nle = Now.ToShortDateString & " : " & Now.ToShortTimeString & " : " & acn & " : " & aMessage ' Add to log ' note: you could also add the nle string to a listbox or something else... My.Application.Log.DefaultFileLogWriter.WriteLine(nle) My.Application.Log.DefaultFileLogWriter.Flush() End Sub
VB .NET: Binary compare files
24. Aug 2008 20:23 (bearbeiten)
This little function compares two files byte for byte and returns true if they are equal.
Public Shared Function Compare(ByVal aFilename1 As String, ByVal aFilename2 As String) As Boolean Dim fs1 As New System.IO.FileStream(aFilename1, IO.FileMode.Open, IO.FileAccess.Read) Dim fs2 As New System.IO.FileStream(aFilename1, IO.FileMode.Open, IO.FileAccess.Read) If fs1.Length <> fs2.Length Then Return False End If For i As Integer = 0 To fs1.Length - 1 Step i + 1 If fs1.ReadByte <> fs2.ReadByte Then Return False End If Next fs1.Close() fs2.Close() Return True End Function

