Le migliori pratiche per sincronizzare i percorsi lunghi con i file system in cui la lunghezza del percorso è limitata?

2

Ho scritto uno strumento di sincronizzazione per sincronizzare cartelle / file da Alfresco a Windows.
PROBLEMA:

  • In Alfresco, /files/can/have/very/very/very/long/filepaths/like/this.txt
  • L'API di Windows mi impedisce di creare un percorso con più di 260 caratteri .

Oltre a dire all'utente c'è un problema, qual è la migliore pratica in questo caso?

  1. Accorcia il nome del file?
  2. Salta il file?
  3. Crea una sorta di "ritorno a capo della cartella", una cartella speciale da cui il percorso può continuare?
  4. Qualcos'altro?

I file devono essere utilizzabili al 100% da altre applicazioni. Se è necessario modificare i nomi delle directory, posso mantenere una mappatura.

    
posta Nicolas Raoul 09.02.2013 - 01:43
fonte

4 risposte

3

Il problema che hai menzionato non esiste, dal momento che il limite specificato nella tua domanda è sbagliato.

  • Fino a Vista, Explorer era limitato a 248 caratteri.
  • .NET Framework File è limitato a 260 caratteri ( MAX_PATH ).
  • Il vero percorso massimo per Windows è di ca. 32.767 caratteri.

Non ho idea di dove hai trovato la menzione di 255 caratteri.

Ora, se sincronizzi i file con un sistema operativo che non consente percorsi di 32.767 caratteri (come le versioni molto vecchie di Windows), allora:

  • Salta il file,
  • Informa l'utente che c'è un problema con la lunghezza dei file dati. Fallo solo alla fine del processo, non file per file. Non c'è niente di più fastidioso di essere disturbato decine di volte durante un processo perché ci sono dozzine di file che non possono essere sincronizzati.
  • Non abbreviare il nome del file. Hai buone probabilità di causare più problemi con le collisioni.
risposta data 09.02.2013 - 02:36
fonte
2

Vedi l'articolo di MSDN su percorso massimo limitazioni di lunghezza per alcune idee aggiuntive.

Puoi provare alcuni dei seguenti aspetti a seconda di ciò che è a tua disposizione:

  • Tentativo di utilizzare "percorsi di lunghezza estesa" che iniziano con \\? \, ma sii consapevole delle limitazioni come nessun nome di percorso relativo.
  • Mappare un percorso più lungo su un'unità utilizzando subst per ridurre artificialmente il percorso.

Se non sei assolutamente in grado di sincronizzare il file, la migliore pratica sarebbe quella di saltare il file e prendere nota di tutti i file saltati in una sorta di rapporto di errore, o uscire presto, notando che non sei in grado di completare la sincronizzazione come desiderato .

    
risposta data 09.02.2013 - 03:32
fonte
0

Se davvero hai bisogno di ridurre il percorso verso il basso (dubbioso - vedi altre risposte) che ne è di un qualche tipo di hash? Se è necessario preservare la mappatura bidirezionale dei nomi dei file, è possibile memorizzarli altrove, ad esempio un database. Non è super conveniente, ma se devi abbreviare i nomi dei file non sarà conveniente come vorresti.

    
risposta data 12.02.2013 - 22:26
fonte
0

Questo è solo un rifacimento delle risposte esistenti di MainMa e Jay Lindquist .

  • Utilizza l'API di Windows sottostante che supporta la lunghezza massima del percorso di 32.767.
  • Crea il documento con il percorso completo, ma anche crea un link simbolico da qualche parte in una cartella a una profondità più breve:
    • C:\exported files\Links to documents with path names too long\shortened_name.doc

Quindi, un elenco di tali documenti e la loro posizione completa del percorso possono essere segnalati alla fine dell'operazione.

Nota sul framework .NET : questo articolo del blog su MSDN descrive in modo più accurato le pratiche raccomandate per quanto riguarda la compatibilità con altre applicazioni.

    
risposta data 09.02.2013 - 07:28
fonte