Tenga en cuenta que es posible que tenga varios sistemas de archivos con diferentes reglas de mayúsculas y minúsculas. Por ejemplo, el sistema de archivos raíz podría distinguir entre mayúsculas y minúsculas, pero puede tener un sistema de archivos que no distinga entre mayúsculas y minúsculas (por ejemplo, una memoria USB con un sistema de archivos FAT) montado en algún lugar. Entonces, si realiza tales comprobaciones, asegúrese de hacerlo en el directorio al que va a acceder.
Además, ¿qué sucede si el usuario copia los datos de, por ejemplo, un sistema de archivos que distingue entre mayúsculas y minúsculas a un sistema de archivos que no distingue entre mayúsculas y minúsculas? Si tiene archivos que difieren solo en mayúsculas y minúsculas, uno de ellos sobrescribirá al otro, lo que provocará la pérdida de datos. Al copiar en la otra dirección, también puede tener problemas, por ejemplo, si el archivo A contiene una referencia al archivo "b", pero el archivo en realidad se llama "B". Esto funciona en el sistema de archivos original que no distingue entre mayúsculas y minúsculas, pero no en el sistema que distingue entre mayúsculas y minúsculas.
Por lo tanto, le sugiero que evite depender de si el sistema de archivos distingue entre mayúsculas y minúsculas o no, si puede. No genere nombres de archivos que difieran solo por mayúsculas y minúsculas, utilice los cuadros de diálogo de selección de archivos estándar, prepárese para que las mayúsculas y minúsculas puedan cambiar, etc.
No es una función .NET, pero las funciones GetVolumeInformation y GetVolumeInformationByHandleW de la API de Windows harán lo que usted quiera (consulte el parámetro yje lpFileSystemFlags.
No existe tal función en la biblioteca de clases .NET.
Sin embargo, puede implementar el suyo:intente crear un archivo con un nombre en minúsculas y luego intente abrirlo con la versión en mayúsculas de su nombre. Probablemente sea posible mejorar este método, pero entiendes la idea.
EDITAR :En realidad, podría simplemente tomar el primer archivo en el directorio raíz y luego verificar si existen tanto filename.ToLower() como filename.ToUpper(). Desafortunadamente, es muy posible que existan variantes en mayúsculas y minúsculas del mismo archivo, por lo que debe comparar las propiedades de FileInfo.Name de las variantes en mayúsculas y minúsculas para ver si realmente son iguales o no. Esto no requerirá escribir en el disco.
Obviamente, esto fallará si no hay ningún archivo en el volumen. En este caso, simplemente recurra a la primera opción (consulte la respuesta de Martin para la implementación).
Puede crear un archivo en la carpeta temporal (usando el nombre de archivo en minúsculas), luego verifique si el archivo existe (usando el nombre de archivo en mayúsculas), por ejemplo:
string file = Path.GetTempPath() + Guid.NewGuid().ToString().ToLower();
File.CreateText(file).Close();
bool isCaseInsensitive = File.Exists(file.ToUpper());
File.Delete(file);