Esiste una convenzione stabilita per separare i nomi di file di Windows in una stringa?

2

Ho una funzione che ha bisogno di generare una stringa contenente un elenco di percorsi di file. Posso scegliere il carattere di separazione ma non posso modificare il tipo di dati (ad es. Non posso restituire List<string> o qualcosa del genere).

Volendo utilizzare alcune convenzioni consolidate, la mia prima intuizione era di usare il punto e virgola, simile a quello che le variabili di ambiente PATH di Windows e CLASSPATH (su Windows) fanno:

C:\somedir\somefile.txt;C:\someotherdir\someotherfile.txt

Tuttavia, sono stato sorpreso di notare che ; è un carattere valido in un nome di file NTFS.

Quindi, la best practice consolidata è

  • ignora questo fatto (ad es. "nessuna persona sana di mente dovrebbe usare ; nel nome di un file e, se lo fa, è colpa sua") o
  • c'è qualche altro carattere stabilito per separare percorsi o file di Windows? (La pipe ( | ) potrebbe essere una buona scelta, ma non l'ho mai vista usata da nessuna parte per questo scopo.)
posta Heinzi 24.10.2012 - 09:48
fonte

3 risposte

8

| è uno dei caratteri di nome file / directory non validi ed è spesso usato come separatore, quindi è una buona scelta per un separatore di percorsi in una stringa.

    
risposta data 24.10.2012 - 10:59
fonte
6

Sorprendentemente, ma |, <, e altri simboli da il link fornito da Oded sono caratteri riservati solo per la funzione CreateFile e diverse altre API di Windows. Sicuramente, il driver NTFS non conosce queste restrizioni e consente di creare nomi di file con questi simboli, che potrebbero essere facilmente eseguiti ad esempio in Linux usando ntfs-3g driver + strumenti. In Windows è anche possibile creare file con tali nomi che non sarebbero cancellati / leggibili / scrivibili da chiamate API ordinari utilizzando API di basso livello o dalla modalità kernel.

Suppongo che la migliore alternativa contro l'uso di un separatore esoterico sia utilizzare un formato di serializzazione come XML o json , che è supportato in molte lingue moderne.

es. i tuoi dati in formato json avranno il seguente aspetto:

[ "C: \ somedir \ somefile.txt", C: \ someotherdir \ someotherfile.txt "]

    
risposta data 24.10.2012 - 11:25
fonte
1

L'impostazione PATH di Windows utilizza il punto e virgola ( ; ). Sembra che potrebbe essere un buon standard da seguire.

    
risposta data 24.10.2012 - 22:23
fonte

Leggi altre domande sui tag