Warum meldet Windows, dass dieser Ordner zu lange zum Kopieren ist?
Wenn Sie lange genug mit Windows arbeiten, insbesondere mit Ordnern und Dateien, die lange Namen haben, wird ein bizarrer Fehler angezeigt: Windows meldet, dass der Ordnerpfad oder der Dateiname zu lang ist, um zu einem neuen Ziel zu wechseln oder sogar zu löschen. Was ist das Problem?
Hey How-To Geek!
Neulich reorganisierte ich einige Dateien auf meinem Computer und erstellte Ordner, solche Sachen. Wenn ich dann einige Dateien in einen Ordner verschoben habe, erhalte ich eine Meldung, dass der resultierende Ordnerpfad zu lang wäre. Ich war verwirrt. Ich weiß, dass jedes einzelne Betriebssystem seit DOS lange Dateinamen unterstützt, dennoch behauptet Windows, dass der Pfad zu lang ist. Warum passiert das?
Mit freundlichen Grüßen,
Mr. Unorganisiert
Das Problem, dem Sie begegnen, ist eine unglückliche Überschneidung zweier Systeme, die in solchen Fällen einen Fehler ergibt. Um genau zu verstehen, woher der Fehler kommt, müssen wir uns mit der Geschichte von Long Filenames (LFN) und der Interaktion von Windows mit ihnen befassen, bevor wir uns mit Lösungen beschäftigen.
Lange Dateinamen wurden über die zugrunde liegende MS-DOS-Architektur in Windows 95 eingeführt. Das neue LFN-System erlaubte Datei- und Verzeichnisnamen mit bis zu 255 Zeichen. Dies war eine willkommene Erweiterung des vorherigen Dateinamensystems, normalerweise als 8.3-Dateiname bezeichnet, da der Name auf acht Zeichen und eine dreistellige Erweiterung begrenzt war, aber auch als Kurzer Dateiname (Short FileName, kurz SFN) bezeichnet wurde. Wie Sie sich vorstellen können, gab es damals noch eine Menge DOS-basierter Apps und es gab mehr als ein paar Kopfschmerzen, um die neueren LFNs und die alten SFNs dazu zu bringen, gut miteinander zu spielen. Wenn Sie jemals eine ältere Diskette oder CD-ROM mit merkwürdig abgeschnittenen Dateien gefunden haben (wie etwa abcdef ~ 1.txt), wurde der Dateiname von einer älteren SFN-Anwendung mit älteren und nicht mehr unterstützten LFN (wie etwa abcdefghijk) reduziert. TXT).
Wir sind jedoch weit weg von der Mitte der 1990er Jahre, und das Ganze mit dem langen Dateinamen ist (zum größten Teil) fest entschärft. Wenn Sie eine Windows-Version aus den letzten 10 Jahren verwenden, sind Sie wahrscheinlich nie auf einen Dateinamenskonflikt gestoßen, wie wir ihn in den letzten Tagen unter DOS / Windows 95 hatten. Das heißt, wir haben immer noch Probleme, wie Sie bei Ihrem Projekt zur Datenträgerbereinigung festgestellt haben. Aber warum? Wenn das Windows-System für lange Dateinamen Ordner und Dateinamen mit bis zu 255 Zeichen pro Komponente unterstützt, in welche Mauer laufen Sie? Wir können NTFS (dem Dateisystem, das die große Mehrheit moderner Windows-Computer verwendet) nicht die Schuld geben, da NTFS eine Verkettung von Ordnern und Dateinamen mit einer Gesamtpfadlänge von 32.767 Zeichen unterstützt. Das geht weit über die typische Verzeichnisstruktur hinaus, die die meisten Benutzer jemals benötigen würden.
Wo alles zusammenbricht, ist eine künstliche Einschränkung, die Windows auf dem LFN / NTFS-System stapelt: die Variable MAX_PATH. Die Variable MAX_PATH gibt an, dass eine vollständige Verzeichnisstruktur in Windows nicht mehr als 260 Zeichen umfassen darf, einschließlich Laufwerkbuchstaben, Doppelpunkt, Backslash und null Backlash am Ende. Somit haben Sie nur einen potenziellen reellen MAX_PATH von 256 Zeichen, z. C: \ Ihr-256-Zeichen-Pfad \.
Beim Bereinigen Ihres Computers ist Folgendes passiert: Sie hatten ein Verzeichnis mit einem bereits langen Pfad (entweder weil die Ordnernamen lang waren, die Dateinamen lang waren oder beides) und wenn Sie versuchten, einen oder mehrere Ordner zu verschieben Wenn sich diese Verzeichnisse in einem anderen Verzeichnis mit einem langen Pfad befinden, hat die Gesamtlänge des Pfadnamens die von der Variablen MAX_PATH festgelegte Grenze von 260 Zeichen überschritten.
Nun denkst du vielleicht „Ah-hah! Wir ändern einfach die MAX_PATH-Variable und lösen das Problem! “Leider ist das nicht so einfach. Die MAX_PATH-Variable ist nicht nur im Wesentlichen hart in Windows codiert, sondern selbst wenn Sie den enormen Ärger der Änderung durchgemacht haben, würden Sie am Ende so viel kaputt machen, dass es sich nicht lohnt. Zu viele Anwendungen erwarten, dass die Pfadvariable so ist, wie sie von Windows lange angegeben wurde. Wir können es nicht einfach ändern, ohne ein riesiges Durcheinander zu verursachen.
Wo bleibt dich das? Nun, die einfachste Lösung besteht darin, nur die Pfaddaten zu bearbeiten. Wenn Sie beispielsweise über eine Menge gespeicherter Artikel verfügen, bei denen die Anwendung / Erweiterung, die Sie zum Speichern aus dem Web verwendet haben, ein Verzeichnis erstellt wurde, das den vollständigen Titel des Artikels + die Artikelleitung enthält, und dann der Dateiname selbst der vollständige Titel ist Es wäre sehr einfach, den MAX_PATH des Artikels + der Artikelleitung mit einem einzigen Speicherwert zu treffen oder zu überschreiten. Wenn Sie die enormen Ordner- und Artikeltitel in einer angemesseneren Größe bearbeiten, können Sie das Problem auf einfache Weise beheben.
Wenn Sie über eine große Anzahl von Dateien mit einem langen Pfad verfügen und Sie nicht alle bearbeiten möchten (oder wenn Sie möchten) löschen Eine Menge alter Verzeichnisse, die zu lang sind, um von Windows verarbeitet zu werden, wenn sie durch die MAX_PATH-Variable eingeschränkt werden, gibt es eine Befehlszeile, mit der gearbeitet wird. Obwohl Windows durch die Variable MAX_PATH eingeschränkt ist, stellten die Windows-Ingenieure fest, dass es Situationen geben würde, in denen Benutzer längere Pfadnamen verwenden müssten. Die Windows-API verfügt daher über eine Funktion zum Umgang mit extrem langen Pfaden.
Um diese API zu nutzen und Befehlszeilentools für Ihre unhandlichen Ordner- / Dateinamen zu verwenden, müssen Sie lediglich den Verzeichnisnamen mit ein paar zusätzlichen Zeichen anhängen. Wenn Sie beispielsweise eine große Verzeichnisstruktur haben, die Sie löschen möchten (aber beim Versuch einen Fehler aufgrund der Pfadlänge erhalten haben), können Sie den Befehl folgendermaßen ändern:
rmdir c: \ documents \ some-really-super-long-ordnernamenschema \
zu:
rmdir \\? \ c: \ documents \ some-really-super-long-ordner-namenschema \
Der Schlüssel ist das Hinzufügen von \\? \
Teil vor dem Anfang des Dateipfads; Dies weist Windows an, die durch die Variable MAX_PATH auferlegten Einschränkungen zu ignorieren und mit dem Pfad, den Sie gerade angegeben haben, zu interagieren, so wie er direkt vom zugrunde liegenden Dateisystem bereitgestellt / verstanden wurde (was eindeutig einen längeren Pfad unterstützen kann). Gehen Sie an der Eingabeaufforderung wie immer vorsichtig vor, um ein versehentliches Löschen von Dateien oder Verzeichnissen zu vermeiden, die intakt bleiben sollen.
Wenn Sie an unserem Überblick über dieses Problem interessiert sind, finden Sie in diesem Artikel auf jeden Fall Informationen aus der Microsoft Developer Network-Bibliothek, unter Benennen von Dateien, Pfaden und Namespaces. Dort finden Sie weitere Informationen zu den Vorgängen unter der Haube.
Haben Sie eine dringende technische Frage? Schicken Sie uns eine E-Mail an [email protected] und wir werden unser Bestes tun, um es zu beantworten.