Maximale bestandsnaamlengte in NTFS (Windows XP en Windows Vista)?

Ik ben een databasetabel aan het ontwerpen die bestandsnamen van geüploade bestanden zal bevatten. Wat is de maximale lengte van een bestandsnaam in NTFS zoals gebruikt door Windows XP of Vista?


Antwoord 1, autoriteit 100%

Individuele componenten van een bestandsnaam (d.w.z. elke submap langs het pad en de uiteindelijke bestandsnaam) zijn beperkt tot 255 tekens en de totale padlengte is beperkt tot ongeveer 32.000 tekens.

In Windows mag u de waarde MAX_PATHechter niet overschrijden (259 tekens voor bestanden, 248 voor mappen). Zie http://msdn.microsoft.com/en-us/library/aa365247.aspxvoor volledige details.


Antwoord 2, autoriteit 10%

Het zijn 257 tekens.
Precies zijn:
NTFS zelf legt wel een maximale bestandsnaamlengte op van enkele duizenden tekens (ongeveer 30.000 tekens).
Windows legt echter een maximale lengte van 260 op voor Pad+Bestandsnaam. De schijf+map neemt minimaal 3 tekens in beslag, dus je krijgt er 257.


Antwoord 3, autoriteit 9%

Dit is wat de “Niet-verwerkte uitzondering” zegt in Framework 4.5 wanneer u probeert een bestand met een lange bestandsnaam op te slaan:

Het opgegeven pad, de bestandsnaam of beide zijn te lang. De volledig gekwalificeerde bestandsnaam moet minder dan 260tekens bevatten en de mapnaam moet minder dan 248tekens bevatten.

screenshot


Antwoord 4, autoriteit 5%

199 op Windows XP NTFS, ik heb het net gecontroleerd.

Dit is geen theorie, maar van gewoon proberen op mijn laptop. Er kunnen verzachtende effecten zijn, maar ik kan het fysiek niet groter maken.

Is er een andere instelling die dit beperkt, vraag ik me af? Probeer het zelf.


Antwoord 5, autoriteit 5%

De lengte in NTFS is 255. Het veld NameLengthin het NTFS-kenmerk $Filenameis een byte zonder offset; dit levert een bereik van 0-255 op.

De bestandsnaam zelf kan in verschillende “naamruimten” staan. Tot nu toe zijn er: POSIX, WIN32, DOS en (WIN32DOS – wanneer een bestandsnaam native een DOS-naam kan zijn). (Omdat de string een lengte heeft, kan\0 bevatten, maar dat zou voor problemen zorgen en staat niet in de naamruimten hierboven.)

De naam van een bestand of map kan dus maximaal 255 tekens bevatten. Wanneer u het volledige pad onder Windows opgeeft, moet u het pad voorvoegen met \\?\(of gebruik \\?\UNC\server\share voor UNC-paden)om dit pad te markeren als een verlengd pad (~32k tekens). Als je pad langer is, moet je onderweg je werkmap instellen (ugh – bijwerkingen vanwege de procesbrede instelling).


Antwoord 6, autoriteit 4%

Volgens MSDNzijn het 260 tekens. Het bevat "<NUL>"-het onzichtbare afsluitende null-teken, dus de werkelijke lengte is 259.

Maar lees het artikel, het is iets ingewikkelder.


Antwoord 7, autoriteit 3%

255 tekens.

http://en.wikipedia.org/wiki/Bestandsnaam


Antwoord 8, autoriteit 2%

Ik voeg dit toe aan het bovenstaande goedgekeurde antwoord.

Voor alle duidelijkheid, de reden waarom mensen denken dat het 255-260 tekens zijn, is omdat dat alles is dat Windows Verkenner ondersteunt. Het zal fouten maken door zoiets als een bestandskopie te doen op bestandsnamen die langer zijn dan dat. Een programma kan echter veel langere bestandsnamen lezen en schrijven (en dat is hoe je te ver gaat waar Explorer in de eerste plaats over klaagt). De “aanbevolen oplossing” van Microsoft in situaties als deze is om het bestand te openen in het originele programma dat het heeft geschreven en de naam ervan te wijzigen.


Antwoord 9

Dit deel van de officiële documentatiezegt duidelijk dat het 255 Unicode-tekenszijn voor NTFS, exFAT en FAT32, en 127 Unicode- of 254 ASCII-tekens voor UDF.

Daarnaast is de maximale lengte van de padnaam altijd 32.760 Unicode-tekens, waarbij elke padcomponent niet meer dan 255 tekens bevat.


Antwoord 10

Volgens de nieuwe Windows SDK-documentatie (8.0) lijkt het erop dat er een nieuwe padlimiet wordt gegeven. Er is een nieuwe set van pad verwerkingsfunctiesen een definitie van PATHCCH_MAX_CCH als volgt:

// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH             0x8000

Antwoord 11

255 tekens, hoewel het volledige pad ook niet langer mag zijn. Er is een mooie tabel op Wikipedia hierover: http://en.wikipedia.org/wiki/Filename .


Antwoord 12

238!
Ik heb het gecontroleerd onder Win7 32 bit met het volgende bat-script:

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

Antwoord 13

Eigenlijk is het 256, zie Vergelijking van bestandssysteemfunctionaliteit, limieten.

Als je een bericht wilt herhalen op http: //fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html

“Ervan uitgaande dat we het hebben over NTFS en niet over FAT32, de “255 tekens”
for path+file” is een beperking van Explorer, niet het bestandssysteem zelf.
NTFS ondersteunt paden tot 32.000 Unicode-tekens lang, met elk
component tot 255 tekens.

Verkenner -en de Windows API- beperkt je tot 260 tekens voor de
pad, inclusief stationsletter, dubbele punt, scheidingstekens en a
null-teken beëindigen. Het is mogelijk om een ​​langer pad in te lezen
Windows als u het start met een \\

Als je de bovenstaande berichten leest, zul je zien dat er een vijfde ding is waar je zeker van kunt zijn:
Minstens één koppige computergebruiker vinden!


Antwoord 14

Ik kan geen bestand maken met de naam+periode+extensie in WS 2012 Explorer langer dan 224tekens. Schiet niet op de boodschapper!

In de CMD van dezelfde server kan ik geen tekennaam langer dan 235maken:

Het systeem kan het opgegeven pad niet vinden.

Het bestand met een naam van 224 tekens dat in de Verkenner is gemaakt, kan niet worden geopend in Notepad++ – het komt in plaats daarvan met een nieuw bestand.

Other episodes