Pfadnamenbeschränkung für Fenster mit 256 Zeichen

17

Nach langer Recherche fand ich schließlich heraus, dass Pfadnamen auch in der neuesten Version von Microsoft Windows 7 nicht länger als 256 Zeichen sein dürfen. Ich verstehe nicht, warum es so eine blöde Einschränkung gibt, da NTFS bis zu ~ 32.000 Zeichen Pfad verarbeiten kann Länge ohne Probleme seit mehr als einem Dutzend Jahren! Gibt es keine Möglichkeit, das zu ändern? Oder gibt es praktische Lösungen, um dies zu vermeiden?

260 Zeichen sind nur sehr wenige Zeichen, selbst für einfache Anwendungsfälle wie einige verschachtelte Fotoverzeichnisse mit langen Dateinamen.

HopelessN00b
quelle
1
Ich denke, die Sorge ist, dass es ältere Programme gibt, die eine feste Vorstellung davon haben, wie lang ein Pfad sein sollte. Wenn Sie also versuchen, sie auf längeren Pfaden zu verwenden, werden sie auf interessante Weise explodieren.
Dsolimano
Haben Linux-Betriebssysteme dieses Problem?
ahorn

Antworten:

18

Laut Microsoft:

  • Die traditionelle Windows-API beschränkt Pfadnamen auf 260 Zeichen, auch für Anwendungen, die für die neueste Version entwickelt wurden.

  • Anwendungen, die die Unicode-fähige API verwenden, können eine Pfadform verwenden, die bis zu 32767 Zeichen zulässt. Der Dateiname muss mit einem Präfix versehen sein \\?\und ein absoluter Pfad sein, z . B. \\?\c:\dir\fileoder \\?\UNC\server\share\file. Weitere Einschränkungen finden Sie in der Referenz.

Wenn Sie es geschafft haben, eine tiefe Dateihierarchie zu erstellen und zu verwenden und mit einer Anwendung arbeiten müssen, die aufgrund der Länge des Dateinamens bombardiert wird, können Sie Folgendes versuchen:

  • Verwenden Sie den mklinkBefehl, um symbolische Links zu erstellen , und übergeben Sie einen Pfad, der sie verwendet, an Ihre Anwendung.

  • Verwenden Sie den substBefehl, um einem Verzeichnis einen Laufwerksbuchstaben zuzuweisen.

  • Starten Sie Ihre Anwendung aus einem tiefen Verzeichnis und übergeben Sie kurze relative Pfade.

  • Ersetzen Sie einige lange Namen durch ihre 8.3 - Aliase ( micros~1), unter der Annahme , diejenigen existieren noch in Windows 7. Wenn Sie micros~1neben micros~2, ich weiß nicht , wie zu sagen , welche welche ist; Führen Sie möglicherweise DOS aus command.com(unter der Annahme, dass Windows 7 dies noch kann).

Gilles 'SO - hör auf böse zu sein'
quelle
3
Nun, sogar der Windows Explorer von Win7 scheint die traditionelle API zu verwenden! Das ist schade.
3
Noch mehr Backslashes :-)
Ring Ø
@Gilles, Ist micros ~ 1 und micros ~ 2 systemübergreifend standardisiert oder ist es zufällig?
Pacerier
@Pacerier Das Verzeichnis, das zuerst erstellt wurde micros~1, wird grundsätzlich zufällig ausgewählt.
Gilles 'SO- hör auf böse zu sein'
0

Sie können die Kurznamen (8.3) für alle Ihre Ordner und Dateien verwenden.

Sie müssen jedoch sicherstellen, dass sie aktiviert sind.

Ein langer Dateiname ist ein beliebiger Dateiname, der die Namenskonvention für MS-DOS-Kurznamen (auch als 8.3 bezeichnet) überschreitet. In der Regel speichert Windows lange Dateinamen auf der Festplatte als spezielle Verzeichniseinträge, die je nach Dateisystem aus Leistungsgründen systemweit deaktiviert werden können. Wenn Sie einen langen Dateinamen erstellen, erstellt Windows möglicherweise auch eine kurze 8.3-Form des Namens, den 8.3-Alias, und speichert ihn auch auf der Festplatte. Dieses 8.3-Aliasing kann für ein bestimmtes Volume deaktiviert werden.

(mein kühnes)

Sie müssen auch Code schreiben, um den Kurznamen aus dem Langnamen zu erhalten.

Quelle

ChrisF
quelle
2
lol ... Ich kann mich gut an diese Tage in Windows 95 erinnern, als wir alle diesen super duper FAT32 mit 256 Zeichen langen Dateinamen bekamen! Das war fantastisch (an diesen Tagen) und ich bin wirklich schockiert, dass Dateinamenbeschränkungen in diesen Tagen immer noch ein Problem sein könnten . 2010! Windows ist wirklich archaisch ...
0

Der Datei- / Verzeichnisname in NTFS ist auf 255 Unicode-Codepunkte begrenzt, da die Länge als Byte gespeichert wird. Es gibt jedoch keine inhärente Begrenzung der Gesamtpfadlänge.

Viele Win32-API-Aufrufe (einschließlich Explorer-Shell-Aufrufe) haben das Längenlimit 260-1. Einige andere Aufrufe können das Präfix \\? \ Verwenden, um bis zu 32 KB zu erreichen (etwas weniger, da der Datenträgername im Kernelland ersetzt wird).

Dominik Weber
quelle