¿Tiene .net una forma de determinar si el sistema de archivos local distingue entre mayúsculas y minúsculas?¿Cómo puedo determinar si el sistema de archivos distingue entre mayúsculas y minúsculas en .net?
Respuesta
Se puede crear un archivo en la carpeta de archivos temporales (utilizando el nombre de archivo en minúsculas), a continuación, comprobar si existe el archivo (utilizando 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);
Intente crear un archivo temporal en todas las minúsculas y luego compruebe si existe utilizando mayúsculas.
¿qué pasa con abc.xyz y aBc.xyz – masfenix
No existe tal función en .NET Class Library.
Puede, sin embargo, implementar su propia cuenta: intente crear un archivo con un nombre en minúscula y luego intente abrirlo con la versión de upparcase de su nombre. Probablemente es posible mejorar este método, pero entiendes la idea.
EDIT: En realidad, puede tomar el primer archivo en el directorio raíz y luego verificar si existen ambos filename.ToLower() y filename.ToUpper(). Desafortunadamente, es muy posible que existan tanto las variantes en mayúsculas como las minúsculas del mismo archivo, por lo que debe comparar las propiedades de FileInfo.Name de las variantes en minúscula y mayúscula para ver si realmente son iguales o no. Esto no requerirá escribir en el disco.
Obviamente, esto fallará si no hay archivos en absoluto en el volumen. En este caso, vuelva a la primera opción (consulte la respuesta de Martin para la implementación).
Esto podría fallar, si el primer archivo existente, existe en dos variantes de bajos y mayúsculas en un sistema de archivos entre mayúsculas y minúsculas. – M4N
Martin: cierto. Voy a modificar mi respuesta en consecuencia. –
Esto no funcionará como fileInfo.Name y fileInfo.FullName retendrá el caso que se envió al constructor, ¡no obtendrá el caso del nombre de archivo real! – Peter
Tenga en cuenta que usted pueda tener sistemas de archivos múltiples con diferentes reglas de carcasa Por ejemplo, el sistema de archivos raíz puede distinguir entre mayúsculas y minúsculas, pero puede tener un sistema de archivos insensible a mayúsculas y minúsculas (por ejemplo, un dispositivo USB con un sistema de archivos FAT) montado en algún lugar. Entonces, si hace tales comprobaciones, asegúrese de hacerlas en el directorio al que va a acceder.
Además, ¿qué ocurre si el usuario copia los datos de, por ejemplo, sensible a mayúsculas y minúsculas a un sistema de archivos insensible a mayúsculas y minúsculas? Si tiene archivos que difieren solo por caso, uno de ellos sobrescribirá el otro, causando la pérdida de datos. Al copiar en la otra dirección, también podría 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 sensible a mayúsculas y minúsculas.
Por lo tanto, le sugiero que evite si el sistema de archivos distingue entre mayúsculas y minúsculas o no si puede. No genere nombres de archivo que difieran solo por caso, use los diálogos estándar del selector de archivos, prepárese para que el caso cambie, etc.
No es una función .NET, pero las funciones GetVolumeInformation y GetVolumeInformationByHandleW de la API de Windows Haz lo que quieras (véase el parámetro lpFileSystemFlags yje
Disculpe, antigua respuesta, pero mis pruebas parecen indicar que NTFS distingue entre mayúsculas y minúsculas (FileSystemFlags resultante tiene FILE_CASE_SENSITIVE_SEARCH). Entonces, ¿estoy haciendo algo mal? –
/// <summary>
/// Check whether the operating system is case-sensitive.
/// For instance on Linux you can have two files/folders called
//// "test" and "TEST", but on Windows the two can not coexist.
/// This method does not extend to mounted filesystems, which might have different properties.
/// </summary>
/// <returns>true if the operating system is case-sensitive</returns>
public static bool IsFileSystemCaseSensitive()
{
// Actually try.
string file = Path.GetTempPath() + Guid.NewGuid().ToString().ToLower() + "test";
File.CreateText(file).Close();
bool result = File.Exists(file.ToUpper());
File.Delete(file);
return result;
}
sobre la base de la respuesta de M4N, con los siguientes cambios:.
- nombres estáticos por lo que estamos seguros que contiene una carta y no sólo números .
- ¿Quizás más legible?
- Envuelto en un método.
- Documentación.
Una mejor estrategia sería tomar una ruta como argumento y crear el archivo en el mismo sistema de archivos, pero escribir allí podría tener consecuencias inesperadas.
invoco El tramposo:
Path.DirectorySeparatorChar == '\\' ? "I'm insensitive" : "I'm probably sensitive"
- 1. ¿Cómo puedo detectar si el sistema de archivos distingue entre mayúsculas y minúsculas?
- 2. ¿PHP no distingue entre mayúsculas y minúsculas?
- 3. Cómo determinar si una instancia de SQL Server distingue entre mayúsculas y minúsculas o no
- 4. GetElementsByTagName que no distingue entre mayúsculas y minúsculas?
- 5. Android - Cursor SQLite getColumnIndex() distingue entre mayúsculas y minúsculas?
- 6. FileEquals insensible a archivos en el sistema de archivos con distinción entre mayúsculas y minúsculas
- 7. ¿Puedo hacer que un Apache que se ejecute en Windows distingue entre mayúsculas y minúsculas?
- 8. .NET HttpSessionState mayúsculas y minúsculas
- 9. JQuery: ¿cómo puedo escribir un selector 'Contiene contenido' que no distingue entre mayúsculas y minúsculas?
- 10. Cómo reemplazar una cadena que no distingue entre mayúsculas y minúsculas en el objetivo-c iphone?
- 11. ¿Cómo puedo obtener una ruta sensible a mayúsculas y minúsculas en Linux sin iteración de directorios?
- 12. Si MYSQL no distingue entre mayúsculas y minúsculas, ¿cómo funciona para el campo Contraseña en Iniciar sesión?
- 13. La cadena contiene elementos en una matriz (no distingue entre mayúsculas y minúsculas)
- 14. Simulación de mayúsculas y minúsculas en un sistema de archivos que no es sensible
- 15. ¿Puedo forzar la distinción entre mayúsculas y minúsculas del nombre de tabla MySql en sistemas de archivos que no distinguen entre mayúsculas y minúsculas?
- 16. Valor de RequestParam en Spring MVC que no distingue entre mayúsculas y minúsculas
- 17. T-SQL: ¿Cómo creo una clave única que distingue entre mayúsculas y minúsculas?
- 18. Detectando cadena que comienza con expresión y no distingue entre mayúsculas y minúsculas
- 19. No distingue entre mayúsculas consulta sensitive en MySQL
- 20. Búsqueda de SimpleDB de una manera que no distingue entre mayúsculas y minúsculas
- 21. ¿Por qué SQL Server '=' comparator no distingue entre mayúsculas y minúsculas?
- 22. Herramientas para desarrolladores de Chrome: búsqueda que no distingue entre mayúsculas y minúsculas
- 23. Columna única de SQL Server 2008 que distingue entre mayúsculas y minúsculas
- 24. NSMutableArray clasificación - entre mayúsculas y minúsculas
- 25. Rieles - Diseñar, correo electrónico mayúsculas y minúsculas
- 26. escritura entre mayúsculas y minúsculas versión
- 27. getOptions Perl() entre mayúsculas y minúsculas
- 28. OData y distinción entre mayúsculas y minúsculas
- 29. ¿Cambia la intercalación de SQL Server a mayúsculas o minúsculas de mayúsculas y minúsculas?
- 30. expresiones regulares entre mayúsculas y minúsculas
Buena respuesta. Existe una posibilidad extremadamente pequeña de que el GUID creado no contenga 'abcdef'. ¡No es muy probable, pero podría suceder! –
¿Qué tal una creación de una carpeta temporal, creando un nombre de archivo en minúscula conocido y luego probando con el nombre en mayúscula? –
Buen comentario, Mitch (el primero). Puede agregar "a" al nombre del archivo para asegurarse de que contiene al menos una letra. – M4N