GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso determinare se il filesystem fa distinzione tra maiuscole e minuscole in .net?

Tieni presente che potresti avere più file system con diverse regole di maiuscole e minuscole. Ad esempio, il filesystem di root potrebbe essere sensibile alle maiuscole, ma puoi avere un filesystem senza distinzione tra maiuscole e minuscole (ad esempio una chiavetta USB con un filesystem FAT su di essa) montato da qualche parte. Quindi, se esegui tali controlli, assicurati di eseguirli nella directory a cui accederai.

Inoltre, cosa succede se l'utente copia i dati da, ad esempio, un file system con distinzione tra maiuscole e minuscole in un file system senza distinzione tra maiuscole e minuscole? Se disponi di file che differiscono solo per maiuscole e minuscole, uno di essi sovrascriverà l'altro, causando la perdita di dati. Durante la copia nell'altra direzione, potresti anche incorrere in problemi, ad esempio, se il file A contiene un riferimento al file "b", ma il file è effettivamente denominato "B". Funziona sul file system originale senza distinzione tra maiuscole e minuscole, ma non sul sistema con distinzione tra maiuscole e minuscole.

Pertanto, ti suggerirei di evitare di dipendere dal fatto che il file system faccia distinzione tra maiuscole e minuscole o meno, se puoi. Non generare nomi di file che differiscono solo per maiuscole e minuscole, utilizza le finestre di dialogo standard per la selezione dei file, tieni presente che le maiuscole e minuscole potrebbero cambiare, ecc.


Non è una funzione .NET, ma le funzioni GetVolumeInformation e GetVolumeInformationByHandleW dell'API di Windows faranno quello che vuoi (vedi il parametro lpFileSystemFlags.


Non esiste una tale funzione nella libreria di classi .NET.

Puoi, tuttavia, implementare il tuo:prova a creare un file con un nome minuscolo e quindi prova ad aprirlo con la versione maiuscola del suo nome. Probabilmente è possibile migliorare questo metodo, ma si ottiene l'idea.

MODIFICA :In realtà potresti semplicemente prendere il primo file nella directory principale e quindi controllare se esistono sia filename.ToLower() che filename.ToUpper(). Sfortunatamente è del tutto possibile che esistano varianti sia maiuscole che minuscole dello stesso file, quindi è necessario confrontare le proprietà FileInfo.Name di entrambe le varianti minuscole e maiuscole per vedere se sono effettivamente uguali o meno. Ciò non richiederà la scrittura sul disco.

Ovviamente, questo fallirà se non ci sono file sul volume. In questo caso, torna alla prima opzione (vedi la risposta di Martin per l'implementazione).


Puoi creare un file nella cartella temp (usando il nome file in minuscolo), quindi controllare se il file esiste (usando il nome file in maiuscolo), ad esempio:

string file = Path.GetTempPath() + Guid.NewGuid().ToString().ToLower();
File.CreateText(file).Close();
bool isCaseInsensitive = File.Exists(file.ToUpper());
File.Delete(file);

Linux
  1. Come trovare il filesystem del CD/DVD per farlo montare automaticamente:[Linux]

  2. Come determinare quale processo sta creando un file?

  3. Caratteristiche del filesystem "Btrfs".

  4. Come aggiungere l'output a un file?

  5. Come reindirizzare l'output di system() su un file?

Come utilizzare il comando touch in Linux

Come utilizzare il comando head di Linux

Come usare il comando diff di Linux

Come determinare il tipo MIME di un file in Linux

Come aggiungere testo all'inizio del file in Linux

Come creare un filesystem XFS