Eine Bibliothek und Kommandozeilenapplikation um Dubletten innerhalb einer Ordnerstruktur zu identifizieren.
Im u.g. Beispiel sieht man die Instanzierung einer DublettenprüfungFactory
sequenceDiagram
actor Aufrufer
participant DublettenprüfungFactory
participant Dublettenprüfung
Aufrufer->>DublettenprüfungFactory: Build()
DublettenprüfungFactory-->>Aufrufer: DublettenprüfungFactory
Note left of DublettenprüfungFactory: Ggf. eigene Algorithmen / Prüfmethoden überladen
Aufrufer->>DublettenprüfungFactory: Create()
DublettenprüfungFactory-->>Aufrufer: Default: Dublettenprüfung
Aufrufer->>+Dublettenprüfung: Hier kann nun auf das Dublettenprüfung-Objekt zugegriffen werden
Ist die Dublettenprüfung-Klasse instanziert, beinhaltet sie folgende Aufrufe zur Ausführung der Vergleichslogik:
---
title: Aufbau IDublettenprüfung
---
classDiagram
class IDublettenprüfung
<<Interface>> IDublettenprüfung
IDublettenprüfung : SammleKandidaten(string pfad) IReadOnlyCollection~IDublette~
IDublettenprüfung : SammleKandidaten(string pfad, Vergleichsmodi modus) IReadOnlyCollection~IDublette~
IDublettenprüfung : Prüfe_Kandidaten(IEnumerable~IDublette~ kandidaten) IReadOnlyCollection~IDublette~
class IDublette{
<<Interface>>
+IReadOnlyCollection~string~ Dateipfade
}
class Vergleichsmodus{
<<Enumeration>>
Größe_und_Name
Größe
}
Das Programm Dublette.exe kapselt die Logik der Klasse IDublettenprüfung und ist wie folgt definiert:
Eine Kommandozeilenapplikation um Dubletten innerhalb eines Dateisystems zu identifizeren.
SYNTAX:
[-fm:FindModus] [-p:Pfad]
Pflichtfeld:
-p:Pfad Der Pfad zur Dateistruktur die nach Dubletten durchsucht werden soll.
Optional:
-fm:FindModus Der Modus, der für die Erstidentfikation von gleichen Dateien genutzt werden soll. [Standard: 'GN' ]
FindModus (GN = Größe und Name / G = Größe)
AUSGABE:
Die Rückgabe ist eine Liste von Dubletten, die über den primären FindModus gefunden werden und per MD5-Hashvergleich identisch sind.
Ein Dokumentationsmarkdown befindet sich hier
- Zusätzlich zur MD5-Prüfung bei Gleichheit noch einen Binärvergleich ermöglichen (ggf. optional, ebenfalls über Modi) um false positives bei Hashvergleichen auszuschließen
- Korrespondierende Async-Methoden damit, während die Sammlung aufgebaut oder validiert wird, im Hauptprogramm weiter gearbeitet werden kann und per await das Hauptprogramm wieder zum Ausführungsfluss zurückkehrt
- Implementation von Cancellationtoken um die Prozesse anhaltbar zu machen
- Vergleichsmodi als Flags umsetzen, da es ja vll später erweitert werden kann. So könnte ich ein Flag aus Size / Name / Drittem Attribut in beliebiger Reihenfolge umsetzen
- Func<string> oder Func<IStatusProgress> in Factory übergeben, damit bei der Prüfung (die ja länger dauern kann) ein Status mitgegeben wird
- Umlaute im Interface vermeiden