c# - saber - Cómo comprobar si puedo crear un archivo en una carpeta específica
saber si existe un archivo c# (2)
Necesito saber si puedo crear un archivo en una carpeta específica, pero hay demasiadas cosas que revisar, como permisos, archivos duplicados, etc. Estoy buscando algo como File.CanCreate(@"C:/myfolder/myfile.aaa"
), pero no han encontrado tal método. Lo único que pensé fue intentar crear un archivo ficticio y verificar excepciones, pero esta es una solución desagradable que también afecta el rendimiento. ¿Conoces una mejor solución?
En realidad, crear un archivo ficticio no tendrá un gran impacto en el rendimiento en la mayoría de las aplicaciones. Por supuesto, si tienes permisos avanzados para crear pero no destruir, puede ser un poco complicado ...
Las guías siempre son útiles para nombres aleatorios (para evitar conflictos), algo así como:
string file = Path.Combine(dir, Guid.NewGuid().ToString() + ".tmp");
// perhaps check File.Exists(file), but it would be a long-shot...
bool canCreate;
try
{
using (File.Create(file)) { }
File.Delete(file);
canCreate = true;
}
catch
{
canCreate = false;
}
Puede usar CAS para verificar que no haya políticas .NET (caspol) que restrinjan la creación y escritura de un archivo en esa ubicación.
Pero esto no cubrirá las políticas de Windows. Deberá verificar manualmente las políticas NTFS. Y aun así, hay procesos que pueden decidir que no está permitido crear un archivo (por ejemplo, un antivirus).
La mejor y más completa forma es intentarlo.