
Stellen Sie sich ein großes SAN mit hunderttausend Dateien in einer unorganisierten Verzeichnisstruktur vor.
Die Dateien werden in ein neues SAN mit einer organisierten Verzeichnisstruktur verschoben. Einige Dateien werden beim Verschieben umbenannt. Außerdem haben viele Dateien Referenzen, z. B. sind Excel-Tabellen miteinander verknüpft und diese werden nach dem Verschieben nicht mehr funktionieren.
Wir müssen eine Karte mit den Dateipfaden „Von“ und „Nach“ aufbewahren, falls wir auf das Archiv zurückgreifen müssen, um beispielsweise einen defekten Link zu reparieren.
Ich habe recherchiert, ob es etwas auf dem Markt gibt, aber ohne Erfolg. Daher habe ich begonnen, eine Anwendung zu schreiben, mit der Benutzer Dateien und Datensätze per Drag & Drop in eine SQL-Datenbank ziehen können:
Ich bin mir bei diesem Ansatz nicht 100 % sicher. Weiß jemand, ob es dafür eine bessere Möglichkeit gibt? Gibt es dafür in Windows etwas?
Wir dachten daran, die alten und neuen Verzeichnisse zu scannen und auf diese Weise eine Zuordnung zu erstellen. Leider funktioniert das nicht, da sich der Dateiname ändern könnte und die Erstellungs-/Änderungsdaten usw. für die verschobenen Dateien auf den heutigen Tag fallen.
Wir dachten daran, in jeder Datei eine eindeutige Kennung einzufügen, aber diese Idee setzte sich nicht durch. Denn wo soll man die eindeutige Kennung für die verschiedenen Dateitypen speichern?
Möglicherweise ein AutoHotKey-Skript?
Antwort1
Ich habe für einen meiner Kunden ein automatisiertes Bereitstellungssystem in C# erstellt. Dieses Problem sieht ähnlich aus, nur anders im Maßstab.
Dinge, die in ADS erledigt wurden:
- Automatisches Auschecken von SVN.
- Durchsuchen Sie alle Ordner.
- Jeder Ordner kann in den Rollout einbezogen oder davon ausgeschlossen werden.
- Wenn ein Ordner eingeschlossen wird, werden auch alle Dateien und Unterordner eingeschlossen. Dasselbe gilt für den Ausschluss.
- Genau wie die Aufnahme kann jeder Ordner an einen neuen Speicherort im Bereitstellungsordner verschoben werden.
- Alles erfolgte per Drag-and-Drop (zum Glück müssen Bereitstellungsskripte nicht so oft geändert werden).
- Der kritischste Teil war der Vergleich der Binärdateien, um nur geänderte Dateien zu kopieren. <-- Das scheint auch für Sie das Wichtigste zu sein. Da ich nur mit Codedateien wie C#- oder Perl-Codedateien gearbeitet habe, war dies eine einfache Prüfung:
- Dateien links und rechts aufnehmen
- Entfernen Sie alle Leerzeichen.
- Vergleichen Sie Dateien Byte für Byte.
In Ihrem Fall können Sie, sofern die Dateien nicht besonders groß sind, denselben Ansatz verwenden. Bei großen Dateien (vorausgesetzt, es handelt sich um Datendateien) sollte ein einfacher Kopf-/Fußzeilenvergleich ausreichen.
Wir dachten daran, in jeder Datei eine eindeutige Kennung einzufügen, aber diese Idee setzte sich nicht durch. Denn wo soll man die eindeutige Kennung für die verschiedenen Dateitypen speichern?
Damit hatte ich auch angefangen, aber mein Problem war nicht so schwerwiegend, also habe ich es verworfen. Technisch gesehen war jedes FileInfo-Objekt in eine spezielle Klasse eingebunden, die ein bestimmtes Feld vom Typ GUID hatte. Ich habe dieses Array serialisierter Klassen in XML-Dateien gespeichert.
<FIItem>
<ID>*some guid*</ID>
<FileInfoObj>*file info which contains full file path*</FileInfoObj>
</FIItem>