Es gibt Dinge die sind so richtig ärgerlich. Hier wäre beim .NET Framwork das Filehandling zu erwähnen. Mit der Klasse system.io.directoryInfo wird das normaler Weise gemacht. Aber was passiert, wenn die gewünschte Datei (getFiles) oder der gewünschte Unterordner (getDirectory) mehr als 260 respektive 248 (Länge des vollen Pfades zur Datei / Ordner) Zeichen hat? Dann gibt es eine ganz tolle File Exception Ausnahme!
Warum bloß? Tja, das ist eine sehr gute Frage. Das Dateisystem von Windows 2000 und neuer unterstützt bekanntlich 32000 Zeichen und nicht nur wenige Zeichen, wie der .NET Wrapper. Auch mit Kompatibilität zum alten FAT32 System kann das eigentlich nicht mehr groß etwas zu tun haben, da die Klasse doch den Typ des Filesystems prüfen könnte.
Test im Filesystem
Testet man im Filesystem mal aus, so versucht der Windows Explorer einen zu bremsen, wenn man die magische Grenze überschreitet. Eine so angelegte Datei oder Ordner kann aber auch im .NET zu Problemen führen (FileTooLongException). Die Fehlergrenzen scheinen somit im .NET noch geringer zu sein, als in Windows Explorer.
Nicht für Backup geeignet
Somit bleibt festzustellen, dass die .NET Klasse für zum Beispiel Backup Operationen auf einem Fileshare nahezu unbrauchbar ist. Nicht alle Dateien können gezogen werden und selbst die Ausgabe des fehlerhaften Ortes wird schwer.
Wichtig?
Am Anfang dachte ich ja, dass das Problem vernachlässigbar ist und man einfach den fehlerhaften Ordner ausgibt. Er kann umbenannt werden und dann ist der Einzelfall erledigt. Weit gefehlt… Es ist kein Einzelfall!!! Bei 3 von 4 Datenshares habe ich Dateien gefunden, die länger waren als die Grenze in .NET. Keine Ahnung wieso der Windows Explorer scheinbar an einer anderen Stelle die Grenze zieht als das .NET Framework…
Minderwertige Abhilfe
Es bleibt einem also die Möglichkeit die API direkt zu benutzen oder //?/ vor die Datei zu stellen. Doch war mit die erste Variante zu doof und die zweite Variante brachte bei vb.NET nur Fehler. Somit ist es zwar ein Ansatz aber keine Abhilfe.
Funktionierende Abhilfe
Auf der absolut unscheinbaren Seite http://www.delimon.be/SoftwareDetails.aspx?id=5 findet man jedoch ein Tool, was die DirectoryInfo Klasse simuliert und zwar mit 32000 Zeichen. Die Version scheint nicht im ständigen Update zu sein und muss installiert werden (Entwicklungsrechner), aber dann funktioniert es. Mein Programm zum sichern von verdammt langen Ordnerstrukturen funktioniert mit dieser Technik einwandfrei. Das Tool ist dazu noch kostenfrei - vielen Dank!