![]() |
Länge Dateiname/Pfade
Hallo,
ich lese: "In Windows 10, Version 1607, wurden die MAX_PATH-Einschränkungen aus den üblichen Win32-Datei- und Verzeichnisfunktionen entfernt." Was man jedoch Windows über einen Registry-Schlüssel noch mitteilen muss (LongPathsEnabled). Steht denn danach in MAX_PATH ein höherer Wert (sicherlich nicht) oder wie kann man das verstehen? So ganz bin ich mit dem Thema sowieso nicht durch. Oft gibt man ja z.B. "\\?\" mit an. (z.B. bei FindFirstFileW). Aber ich glaube verstanden zu haben, dass ein einzelner Ordner (oder Dateiname) immer noch nur max. 255 (256/260?) Zeichen lang sein darf. Aber was möglich ist, wäre die komplette Pfadangabe zu vergrößern. Also Beispiel: "C:\Ordnermit250\Ordnermit200\Ordnermit255\Dateina memit255zeichen" und wenn man "\\?\" mit angibt, wäre man auf der sicheren Seite? Jetzt mit oder ohne LongPathsEnabled? In MAX_PATH steht bei mir 260. Warum liest man manchmal 255/256 (0-255=256), also im Grunde ein ShortString? Jedenfalls nutze ich WIN32_FIND_DATAW und u.a. hole ich mir den Dateinamen aus "cFileName[MAX_PATH]" heraus. Eigentlich gehört das auch zu den üblichen Win32-Datei- und Verzeichnisfunktionen. Was wurde denn nun entfernt mit den Registry Eintrag für LongPathsEnabled? Und wie lang darf denn nun was und wie sein? :) Da liest man nämlich auch verschiedenes. Was mich auch interessieren würde, ob es hier ein Praxis-Beispiel für eine Ordner-Struktur von sagen wir mal 60000 Zeichen gibt? Oder ich bin mal nicht so hart. Sagen wir mal 10000 Zeichen. :) |
AW: Länge Dateiname/Pfade
Zitat:
|
AW: Länge Dateiname/Pfade
Die Aufhebung dieser Einschränkung hat ohne Anpassungen der eigenen Anwendung keinerlei Auswirkungen. Man muss mindestens das Manifest der eigenen Anwendung um eine weitere Angabe ergänzen (longPathAware). Deswegen
![]() Zitat:
Die Benutzung der Pfade mit Long Path Prefix \\?\ funktioniert davon unahängig, und auch in älteren Windows-Versionen (wahrscheinlich ab Win2k). Grüße Dalai |
AW: Länge Dateiname/Pfade
Ich habe mal getestet, weil ich erst mal verstehen will, wie es die ganze Zeit so ist.
Dateitest: Maximal Dateinamenlänge im Hauptverzeichnis C (255 Zeichen) + C:\ (3 Zeichen) + NULL-Zeichen (1 Zeichen) = 259 Zeichen Warum nicht 260 (MAX_PATH) ? Maximal Dateinamenlänge im Verzeichnis C:\Test (251 Zeichen) + C:\Test\ (8 Zeichen) + NULL-Zeichen (1 Zeichen) = 260 Zeichen (wäre MAX_PATH) Maximal Dateinamenlänge im Verzeichnis C:\Test\Test (246 Zeichen) + C:\Test\Test\ (13 Zeichen) + NULL-Zeichen (1 Zeichen) = 260 Zeichen (wäre MAX_PATH) Ordnertest: Maximale Ordnerlänge im Hauptverzeichnis C (244 Zeichen) + C:\ (3 Zeichen) + NULL-Zeichen (1 Zeichen) + 12 Zeichen (8+3 Dateiname + Punkt) für einen möglichen Dateinamen im Ordner = 260 Zeichen (wäre MAX_PATH) Maximale Ordnerlänge im Verzeichnis C:\Test (239 Zeichen) + C:\Test\ (8 Zeichen) + NULL-Zeichen (1 Zeichen) + 12 Zeichen (8+3 Dateiname + Punkt) für einen möglichen Dateinamen im Ordner = 260 Zeichen (wäre MAX_PATH) Maximale Ordnerlänge im Hauptverzeichnis C:\Test\Test (234 Zeichen) + C:\Test\Test\ (13 Zeichen) + NULL-Zeichen (1 Zeichen) + 12 Zeichen (8+3 Dateiname + Punkt) für einen möglichen Dateinamen im Ordner = 260 Zeichen (wäre MAX_PATH) Also der erste Test im Hauptverzeichnis ergibt nicht 260. Was ist hier falsch? Weiterhin überlege ich über das NULL-Zeichen nach. Die Ordnerlänge müsste doch jeweils um 1 Zeichen weniger sein, weil ein möglicher 8+3 Dateiname (in früheren Zeiten die maximale Länge) auch ein NULL-Zeichen haben muss. Also nicht 12, sondern 13 Zeichen. Zumindest für das API-Interne Zeugs. |
AW: Länge Dateiname/Pfade
Es gibt einen Unterschied zwischen maximaler Pfadlänge (=MAX_PATH) und maximaler Länge eines einzelnen Dateinamens (=255 bei NTFS). Einen Pfad aus mehreren Dateinamen maximaler Länge kann man nur mit dem Long Path Prefix \\?\ benutzen (oder ab Windows 1607, wenn die beiden genannten Bedingungen erfüllt sind).
Grüße Dalai |
AW: Länge Dateiname/Pfade
Also das mit dem "\\?\" ist mir ja bekannt. Jedoch habe ich es noch nicht überall im Einsatz (beim Programmieren).
Gehen wir die Sache noch mal durch :) Nummer 1: Obige Rechnung stimmt. Also rechnerisch würde unter C:\ eigentlich 256 Zeichen für ein Dateiname gehen (weil's 260 ergibt), jedoch sagt NTFS, bei 255 ist Schluss Richtig? Nummer 2: Ohne diesem Registry Eintrag (LongPathsEnabled=1) funktioniert's so wie in meiner Beispielrechnung? Um So mehr Unterverzeichnisse, um so kürzer dann natürlich die Dateinamen und auch die Ordnernamen. Richtig? Nummer 3: Aber in der Programmierung mit dem Prefix "\\?\" kann man Dateien (ob nun in Hauptverzeichnis oder in Unterverzeichnissen) oder aber auch Ordner (siehe Nummer 5) mit maximal 255 Zeichen nutzen. Auch wenn "LongPathsEnabled" auf 0 steht. Wenn man es richtig mit dem Prefix und den API Funktionen umsetzt, also dann auch kopieren/verschieben/löschen. Richtig? Nummer 4: Mein CMD-Test ergab eben, mit "LongPathsEnabled=1", dass ich in jedem Unterverzeichnis maximal 255 Zeichen für ein Dateiname nutzen kann. Richtig? Nummer 5: Mein CMD-Test ergab eben, mit "LongPathsEnabled=1", dass ich auch für Ordner maximal 255 Zeichen nutzen kann. Ebenfalls egal, ob im Hauptverzeichnis oder in Unterverzeichnissen. Richtig? Nummer 6: Wie war das mit FAT32? Da müsste es doch so wie bei Nummer 2 gehen. Richtig? |
AW: Länge Dateiname/Pfade
Zitat:
Zitat:
Zitat:
![]() Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
![]() Zitat:
Grüße Dalai |
AW: Länge Dateiname/Pfade
Da habe ich wohl jetzt die Prüfung bestanden :)
Danke für die Antwort Zitat:
Die frühere Variante ergabt bei meinen Tests ja, dass bei Ordnern noch etwas abgezogen wird, damit ein möglicher 8+3 Dateiname noch reinpassen kann. Was ja auch Sinn macht. Jetzt habe ich wenigstens Durchblick erlangen *lach* Also Dankeschön |
AW: Länge Dateiname/Pfade
Falls du in Zukunft irgendwann ein Programm schreibst welches in der Registzry rumfummelt und LongPathsEnabled umschreibt, würde ich mir vorher die Erlaubnis vom Nutzer einholen.
|
AW: Länge Dateiname/Pfade
Zitat:
So kann man evtl. Fehler abfangen bzw. diese besser identifizieren. Gerade hier sind Errorcodes nicht immer so, wie man sich das wünschen würde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz