Gardez à l'esprit que vous pouvez avoir plusieurs systèmes de fichiers avec différentes règles de casse. Par exemple, le système de fichiers racine peut être sensible à la casse, mais vous pouvez avoir un système de fichiers insensible à la casse (par exemple, une clé USB avec un système de fichiers FAT dessus) monté quelque part. Donc, si vous faites de telles vérifications, assurez-vous de les faire dans le répertoire auquel vous allez accéder.
De plus, que se passe-t-il si l'utilisateur copie les données d'un système de fichiers sensible à la casse vers un système de fichiers insensible à la casse ? Si vous avez des fichiers qui ne diffèrent que par la casse, l'un d'eux écrasera l'autre, entraînant une perte de données. Lors de la copie dans l'autre sens, vous pouvez également rencontrer des problèmes, par exemple, si le fichier A contient une référence au fichier "b", mais que le fichier est en fait nommé "B". Cela fonctionne sur le système de fichiers d'origine insensible à la casse, mais pas sur le système sensible à la casse.
Ainsi, je suggérerais que vous évitiez de dépendre du fait que le système de fichiers soit sensible à la casse ou non si vous le pouvez. Ne générez pas de noms de fichiers qui ne diffèrent que par la casse, utilisez les boîtes de dialogue standard du sélecteur de fichiers, soyez prêt à ce que la casse puisse changer, etc.
Ce n'est pas une fonction .NET, mais les fonctions GetVolumeInformation et GetVolumeInformationByHandleW de l'API Windows feront ce que vous voulez (voir le paramètre yje lpFileSystemFlags.
Il n'y a pas une telle fonction dans la bibliothèque de classes .NET.
Vous pouvez cependant déployer le vôtre :essayez de créer un fichier avec un nom en minuscules, puis essayez de l'ouvrir avec la version majuscule de son nom. Il est probablement possible d'améliorer cette méthode, mais vous voyez l'idée.
MODIFIER :Vous pouvez en fait simplement prendre le premier fichier dans le répertoire racine, puis vérifier si filename.ToLower() et filename.ToUpper() existent. Malheureusement, il est tout à fait possible que des variantes majuscules et minuscules du même fichier existent, vous devez donc comparer les propriétés FileInfo.Name des variantes minuscules et majuscules pour voir si elles sont effectivement identiques ou non. Cela ne nécessitera pas d'écriture sur le disque.
Évidemment, cela échouera s'il n'y a aucun fichier sur le volume. Dans ce cas, revenez simplement à la première option (voir la réponse de Martin pour l'implémentation).
Vous pouvez créer un fichier dans le dossier temporaire (en utilisant un nom de fichier en minuscules), puis vérifier si le fichier existe (en utilisant un nom de fichier en majuscules), par exemple :
string file = Path.GetTempPath() + Guid.NewGuid().ToString().ToLower();
File.CreateText(file).Close();
bool isCaseInsensitive = File.Exists(file.ToUpper());
File.Delete(file);