Ich entwerfe eine Datenbanktabelle, die Dateinamen von hochgeladenen Dateien enthält. Was ist die maximale Länge eines Dateinamens in NTFS, wie er von Windows XP oder Vista verwendet wird?
Ich entwerfe eine Datenbanktabelle, die Dateinamen von hochgeladenen Dateien enthält. Was ist die maximale Länge eines Dateinamens in NTFS, wie er von Windows XP oder Vista verwendet wird?
Antworten:
Einzelne Komponenten eines Dateinamens (dh jedes Unterverzeichnis entlang des Pfads und der endgültige Dateiname) sind auf 255 Zeichen und die Gesamtpfadlänge auf ungefähr 32.000 Zeichen begrenzt.
Unter Windows darf der MAX_PATH
Wert jedoch nicht überschritten werden (259 Zeichen für Dateien, 248 für Ordner). Sehenhttp://msdn.microsoft.com/en-us/library/aa365247.aspx für weitere Informationen.
Es sind 257 Zeichen. Um genau zu sein: NTFS selbst legt eine maximale Dateinamenlänge von mehreren tausend Zeichen fest (ungefähr 30'000). Windows legt jedoch eine maximale Länge von 260 für den Pfad + Dateinamen fest. Der Ordner "Laufwerk +" nimmt mindestens 3 Zeichen auf, sodass Sie 257 erhalten.
Dies ist, was die "Nicht behandelte Ausnahme" in Framework 4.5 sagt, wenn versucht wird, eine Datei mit einem langen Dateinamen zu speichern:
Der angegebene Pfad, Dateiname oder beide sind zu lang. Der vollständig qualifizierte Dateiname muss weniger als 260 Zeichen und der Verzeichnisname weniger als 248 Zeichen enthalten.
199 unter Windows XP NTFS habe ich gerade überprüft.
Dies ist keine Theorie, sondern nur das Anprobieren meines Laptops. Es mag mildernde Effekte geben, aber ich kann es physisch nicht größer machen.
Gibt es eine andere Einstellung, die dies einschränkt? Probieren Sie es aus.
w
, diese gelöscht und unter Windows 7 x64 einen gleichnamigen Ordner erstellt. Die Frage ist nun, was hier der begrenzende Faktor ist: die NTFS-Version, das Betriebssystem oder das Subsystem oder die Win32-API in XP?
Laut MSDN sind es 260 Zeichen. Es enthält "<NUL>"
das unsichtbare abschließende Nullzeichen, sodass die tatsächliche Länge 259 beträgt.
Aber lesen Sie den Artikel, es ist etwas komplizierter.
\\?\
Präfix zur Laufzeit intern auf eine nicht angegebene Länge erweitert. Der Pfad muss nach dieser Erweiterung unter 32767 Byte bleiben.
Die Länge in NTFS beträgt 255. Das NameLength
Feld im NTFS- $Filename
Attribut ist ein Byte ohne Offset. Dies ergibt einen Bereich von 0 bis 255.
Der Dateiname iself kann sich in verschiedenen "Namespaces" befinden. Bisher gibt es: POSIX, WIN32, DOS und (WIN32DOS - wenn ein Dateiname nativ ein DOS-Name sein kann). (Da die Zeichenfolge eine Länge hat, könnte sie \ 0 enthalten, dies würde jedoch zu Problemen führen und befindet sich nicht in den obigen Namespaces.)
Somit kann der Name einer Datei oder eines Verzeichnisses bis zu 255 Zeichen lang sein. Wenn Sie den vollständigen Pfad unter Windows die Angabe, müssen Sie den Pfad mit dem Präfix \\? \ (Oder verwenden Sie \\? \ UNC \ Server \ Freigabe für UNC - Pfade) diesen Weg als extended-Länge eines markieren (~ 32k Zeichen) . Wenn Ihr Pfad länger ist, müssen Sie Ihr Arbeitsverzeichnis auf dem Weg festlegen (ugh - Nebenwirkungen aufgrund der prozessweiten Einstellung).
255 Zeichen.
Ich füge dies der oben genehmigten Antwort hinzu.
Um klar zu sein, glauben die Leute, dass es 255-260 Zeichen sind, weil das alles ist, was Windows Explorer unterstützt. Es wird ein Fehler beim Ausführen einer Dateikopie für Dateinamen auftreten, die länger dauern. Ein Programm kann jedoch viel längere Dateinamen lesen und schreiben (so gelangen Sie zu Längen, über die sich der Explorer überhaupt beschwert). Microsoft empfiehlt in solchen Situationen, die Datei in dem ursprünglichen Programm zu öffnen, in dem sie geschrieben wurde, und sie umzubenennen.
Laut der neuen Windows SDK-Dokumentation (8.0) scheint eine neue Pfadbeschränkung vorgesehen zu sein. Es gibt einen neuen Satz von Pfadhandhabungsfunktionen und eine Definition von PATHCCH_MAX_CCH wie folgt:
// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH 0x8000
In diesem Teil der offiziellen Dokumentation wird klargestellt, dass es sich um 255 Unicode-Zeichen für NTFS, exFAT und FAT32 und 127 Unicode- oder 254 ASCII-Zeichen für UDF handelt.
Abgesehen davon beträgt die maximale Länge des Pfadnamens immer 32.760 Unicode-Zeichen, wobei jede Pfadkomponente nicht mehr als 255 Zeichen enthält.
WCHAR
Elemente. Nein, es handelt sich nicht um "Unicode-Zeichen" (überprüfen Sie Ihre Unicode-Terminologie: Codepunkte, Zeichen usw. ...!).
255 Zeichen, obwohl der vollständige Pfad auch nicht länger sein sollte. Bei Wikipedia gibt es dazu eine schöne Tabelle: http://en.wikipedia.org/wiki/Filename .
238! Ich habe es unter Win7 32 Bit mit dem folgenden Bat-Skript überprüft:
set "fname="
for /l %%i in (1, 1, 27) do @call :setname
@echo %fname%
for /l %%i in (1, 1, 100) do @call :check
goto :EOF
:setname
set "fname=%fname%_123456789"
goto :EOF
:check
set "fname=%fname:~0,-1%"
@echo xx>%fname%
if not exist %fname% goto :eof
dir /b
pause
goto :EOF
w
). So was nun?
Tatsächlich ist es 256, siehe Vergleich der Dateisystemfunktionalität, Grenzwerte .
So wiederholen Sie einen Beitrag auf http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html
"Angenommen, es handelt sich um NTFS und nicht um FAT32. Die" 255 Zeichen für Pfad + Datei "sind eine Einschränkung des Explorers und nicht des Dateisystems selbst. NTFS unterstützt Pfade mit einer Länge von bis zu 32.000 Unicode-Zeichen, wobei jede Komponente bis zu 255 Zeichen enthält.
Der Explorer und die Windows-API beschränken Sie auf 260 Zeichen für den Pfad, einschließlich Laufwerksbuchstabe, Doppelpunkt, Schrägstriche und ein abschließendes Nullzeichen. Es ist möglich, einen längeren Pfad in Windows zu lesen, wenn Sie ihn mit einem
\\
"
Wenn Sie die obigen Beiträge lesen, werden Sie feststellen, dass es eine fünfte Sache gibt, bei der Sie sich sicher sein können: Mindestens einen hartnäckigen Computerbenutzer finden!
Ich kann im WS 2012 Explorer keine Datei mit dem Namen + Punkt + Extnesion erstellen, die länger als 224 Zeichen ist. Erschieße nicht den Boten!
In der CMD desselben Servers kann ich keinen Namen mit mehr als 235 Zeichen erstellen :
Das System kann den angegebenen Pfad nicht finden.
Die im Explorer erstellte Datei mit einem 224-stelligen Namen kann in Notepad ++ nicht geöffnet werden. Stattdessen wird nur eine neue Datei angezeigt.
The system cannot find the path specified.
ist nicht dasselbe wie The specified path, file name, or both are too long.
. Ich denke du hattest einen Tippfehler oder so. Sie erhalten diese Meldung, wenn Sie versuchen, eine Datei in einem nicht vorhandenen Pfad zu erstellen, oder wenn Sie in eine Richtung wechseln möchten, die nicht vorhanden ist.