Limitazione nome percorso finestra 256 caratteri


17

dopo una lunga ricerca, ho finalmente scoperto che i nomi dei percorsi non possono essere più lunghi di 256 caratteri anche nell'ultimo Microsoft Windows 7. In realtà non capisco perché ci sia una tale stupida limitazione, dal momento che NTFS può gestire un percorso fino a ~ 32.000 caratteri lunghezza senza alcun problema da più di una dozzina di anni! Non c'è alcuna possibilità di cambiarlo? O ci sono soluzioni pratiche per evitarlo?

260 caratteri sono solo pochi per casi d'uso anche semplici come alcune directory di foto nidificate con nomi di file lunghi.


1
Penso che la preoccupazione sia che ci siano programmi più vecchi che hanno un'idea precisa di quanto dovrebbe essere lungo un percorso, in modo che se provi ad usarli su percorsi più lunghi, esploderanno in modi interessanti.
dsolimano,

I sistemi operativi Linux hanno questo problema?
Ahorn

Risposte:


18

Secondo Microsoft:

  • L'API Windows tradizionale limita i nomi dei percorsi a 260 caratteri, anche per le applicazioni sviluppate per l'ultima versione.

  • Le applicazioni che utilizzano l'API compatibile con Unicode possono utilizzare una forma di percorso che consente fino a 32767 caratteri. Il nome del file deve essere preceduto da un prefisso \\?\e deve essere un percorso assoluto, ad es . \\?\c:\dir\fileOppure \\?\UNC\server\share\file. Ci sono ulteriori limitazioni, vedere il riferimento per i dettagli.

Se sei riuscito a creare e utilizzare una gerarchia di file profonda e hai bisogno di lavorare con un'applicazione che si scatena a causa della lunghezza del nome del file, ci sono alcune cose che puoi provare:

  • Utilizzare il mklinkcomando per creare collegamenti simbolici e passare un percorso che li utilizza all'applicazione.

  • Utilizzare il substcomando per assegnare una lettera di unità a una directory.

  • Avviare l'applicazione da una directory profonda e passarle brevi percorsi relativi.

  • Sostituisci alcuni nomi lunghi con i loro alias 8.3 ( micros~1), supponendo che esistano ancora in Windows 7. Se hai a micros~1fianco micros~2, non so come dire quale; forse esegui DOS command.com(di nuovo, supponendo che Windows 7 possa ancora farlo).


3
Bene, anche Windows Explorer di Win7 sembra usare l'API tradizionale! È un peccato.

3
Ancora più barre rovesciate `\\? \` :-)
Anello Ø

@Gilles, micros ~ 1 e micros ~ 2 sono standardizzati in tutti i sistemi o è casuale?
Pacerier,

@Pacerier Qualunque sia la directory creata per prima micros~1, quindi è essenzialmente casuale.
Gilles 'SO- smetti di essere malvagio' il

0

È possibile utilizzare i nomi brevi (8.3) per tutte le cartelle e i file.

Tuttavia, è necessario assicurarsi che siano abilitati.

Un nome di file lungo è considerato qualsiasi nome di file che superi la breve convenzione di denominazione in stile MS-DOS (chiamata anche 8.3). In genere, Windows memorizza i nomi di file lunghi sul disco come voci di directory speciali, che possono essere disabilitate a livello di sistema per motivi di prestazioni a seconda del file system specifico. Quando si crea un nome file lungo, Windows può anche creare una breve forma 8.3 del nome, chiamata alias 8.3, e memorizzarlo anche su disco. Questo alias 8.3 può essere disabilitato per un volume specificato.

(il mio grassetto)

Dovrai anche scrivere del codice per ottenere il nome breve dal nome lungo.

fonte


2
lol ... Ricordo bene in questi giorni in Windows 95 quando tutti abbiamo ottenuto questo FAT32 super duper con nomi di file lunghi 256 caratteri! È stato fantastico (in questi giorni) e sono davvero scioccato dal fatto che le limitazioni dei nomi dei file potrebbero essere ancora un problema in questi giorni. 2010! Windows è davvero arcaico ...

0

Il nome file / directory in NTFS è limitato a 255 punti di codice unicode, poiché la lunghezza è memorizzata come byte. Ma non esiste un limite intrinseco della lunghezza totale del percorso.

Molte chiamate API Win32 (compresa la shell explorer) hanno il limite di lunghezza 260 - 1. Alcune altre chiamate hanno la possibilità di utilizzare il prefisso \\? \ Per ottenere fino a 32 KB (un po 'meno, poiché il nome del volume viene sostituito in Kernel-land)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.