Wie man mit Dateien mit Namen, die länger als 259 Zeichen?

Arbeite ich an einer Anwendung, die Spaziergänge durch jede Datei in einige Verzeichnisse und ein paar Aktionen mit diesen Dateien. Unter anderem muss ich die Datei abzurufen, die Größe und das Datum Wann diese Datei geändert wurde.

Einige Datei vollständigen Namen (Verzeichnis + Dateiname) ist zu lang, ich konnte nicht verwenden .NET Framework FileInfo, beschränkt auf MAX_PATH (260 Zeichen). Viele web-Quellen empfohlen, um native Win32-Funktionen über P/Invoke auf die Dateien zugreifen, deren Namen zu lang sind.

Derzeit genau das selbe problem scheint zu entstehen, mit Win32-Funktionen. Zum Beispiel GetFileAttributesEx (kernel32.dll) nicht mit Win32-Fehler 3 ERROR_PATH_NOT_FOUND für den Pfad von 270 bytes.

Die gleiche Datei erfolgreich geöffnet werden Notepad2 und erfolgreich angezeigt mit dem Windows-Explorer (sondern Visual Studio 2010 zum Beispiel nicht zu öffnen, weil die 259 Zeichen grenze1).

Was kann ich tun, um Zugriff auf eine Datei, wenn die Datei Weg ist 270 Zeichen lang?

Hinweise:

  • Entfernen oder ignorieren von Dateien mit der Datei-Pfad Länge, die länger als 259 Zeichen ist keine Lösung.

  • Ich bin auf der Suche nach Unicode-kompatible Lösungen nur.

  • Die Anwendung läuft unter Windows 2008/Vista oder später mit .NET Framework 4 installiert.


1 Überraschend, Microsoft Word 2007 scheitert, beschwert sich, dass "die Diskette ist zu klein" auf einem computer, die nicht haben, die keinerlei floppy-Laufwerk, oder "RAM-Speicher ist niedrig", wenn es 4 GB RAM übrig, oder endlich, dass "antivirus-software [...] muss aktualisiert werden". Wird Sie aufhören, eines Tages Anzeige wie blöd bedeutungslos Fehler zumindest in solchen Schlüssel-Produkte wie Microsoft Office?

  • Ich glaube, auch in diesen Tagen, dass jeder mit dem Namen maps zu einem 8.3 format-Dateinamen können nicht Sie nutzen? en.wikipedia.org/wiki/...
  • Auch ein 8.3 format-Dateinamen können das mehr als 260 Zeichen haben, die Sie gerade brauchen, tief-Ordner verschachteln.
  • Ich glaube nicht, Folgen Sie... Microsoft besitzt und ist direkt verantwortlich für den code, generiert Ihren Fehlermeldungen.
  • Beachten Sie, dass Sie können (und wollen vielleicht, da es fügt I/O-overhead) deaktivieren der 8.3 Namen erstellen, also, Nein, Sie können nicht sicher sein, dass ein 8.3 existiert. Sehen fsutil.exe 8dot3name.
Schreibe einen Kommentar