2008-11-25 9 views
6

Necesito saber si puedo crear un archivo en una carpeta específica, pero hay demasiadas cosas para verificar, como permisos, archivos duplicados, etc. I Estoy buscando algo como File.CanCreate(@"C:\myfolder\myfile.aaa"), pero no he encontrado tal método. Lo único que pensé es 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?Cómo comprobar si puedo crear un archivo en una carpeta específica

+0

Tenga en cuenta, sin embargo, que si comprueba si puede crear un archivo (en cualquier caso) y luego, más tarde, crear realmente el archivo podría generar un error (aquí tiene condiciones de carrera). Por lo tanto, generalmente lo mejor es crear el archivo (final) en primer lugar y manejar posibles errores/excepciones. –

+0

Tiene razón, pero proporciono esta información para su uso posterior, solo soy responsable de brindar esta información, si los permisos cambian después de eso, se producirá otro tipo de error. –

Respuesta

14

En realidad, la creación de un archivo ficticio no tendrá un gran impacto en el rendimiento en la mayoría de las aplicaciones. Por supuesto, si se ha avanzado con permisos de crear, pero no destruirlo podría ser un poco peludo ...

GUID siempre son muy útiles para los nombres al azar (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; 
} 
1

Usted puede usar CAS para verificar que no haya políticas .NET (caspol) que restringen 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.

Cuestiones relacionadas