Nella versione Windows del mio progetto personale corrente, sto cercando di supportare extended length filepaths. Di conseguenza, sono un po 'confuso su come utilizzare l'API GetFullPathNameW per risolvere il nome completo di un percorso file lungo.GetFullPathNameW e lunghi percorsi file Windows
Secondo MSDN (per quanto riguarda il parametro lpFileName):
Nella versione ANSI di questa funzione, il nome è limitato a caratteri MAX_PATH. Per estendere questo limite a 32.767 caratteri di larghezza, chiamare la versione Unicode della funzione e anteporre "\? \" Al percorso. Per ulteriori informazioni, vedere Denominazione di un file.
se sto capire questo modo corretto, al fine di utilizzare una lunghezza percorso file estesa con GetFullPathNameW
, ho bisogno di specificare un percorso con il prefisso di \\?\
allegato. Poiché il prefisso \\?\
è valido solo prima delle lettere di volume o dei percorsi UNC, ciò significherebbe che l'API non è utilizzabile per la risoluzione del nome completo di un percorso relativo alla directory corrente.
In questo caso, esiste un'altra API che posso utilizzare per risolvere il nome completo di un percorso file come ..\somedir\somefile.txt
se la lunghezza del nome risultante supera MAX_PATH
? In caso contrario, sarei in grado di combinare GetCurrentDirectory
con il relativo filepath (\\?\C:\my\cwd\..\somedir\somefile.txt
) e usarlo con GetFullPathNameW
oppure dovrei gestire tutta la risoluzione del percorso file da solo?
Non sembra ragionevole che una funzione per trovare il percorso completo, si richiede di fornire il percorso completo. Quindi, perché non provare ciò che dicono i documenti. Forse sarai piacevolmente sorpreso. –
GetCurrentDirectory() è un unixism che è fondamentalmente MAX_PATH ingombrato. Il sistema operativo nativo non ha nozioni relative ai percorsi relativi o alle directory di default, è necessario * sempre * fornirgli un nome di percorso completo. Dovrai sbarazzartene per andare avanti. –
@ Cheersandhth.-Alf non era molto chiaro se si stesse insinuando provo '\\ \ C:? \ Mio \ cwd \ .. \ somedir \ somefile.txt' o' \\ \ .. \ somedir \ somefile .txt', quindi ho provato entrambi. Il primo risolve correttamente '\\? \ C: \ my \ somedir \ somefile.txt', (che risponde a parte della mia domanda) mentre il secondo risolve erroneamente in' \\? \ Somedir \ somefile.txt'. –