2010-09-26 26 views
7

Me gustaría saber cómo verificar si tengo permisos de escritura en una carpeta.Verificar permisos de escritura en Windows/Linux

Estoy escribiendo un proyecto en C++ y debo imprimir algunos datos en un archivo result.txt, pero necesito saber si tengo permisos o no.

¿El control es diferente entre Linux y Windows? Porque mi proyecto debe ejecutarse en Linux y actualmente estoy trabajando en Visual Studio.

Respuesta

8

La forma portátil de comprobar los permisos es intentar abrir el archivo y comprobar si se realizó correctamente. . Si no, y errno (de la cabecera <cerrno> se establece en el valor EACCES [sí, con una S], entonces usted no tiene los permisos necesarios Esto debería funcionar tanto en Unix/Linux y Windows Ejemplo de stdio:.

FILE *fp = fopen("results.txt", "w"); 
if (fp == NULL) { 
    if (errno == EACCES) 
     cerr << "Permission denied" << endl; 
    else 
     cerr << "Something went wrong: " << strerror(errno) << endl; 
} 

Iostreams funcionará un poco diferente. que yo sepa, no garantizan para establecer errno en ambas plataformas, o reportar errores más específicos que simplemente "fracaso".

Como escribió Jerry Ataúd, no dependen de acceso independiente funciones de prueba ya que su programa será propenso a la carrera condiciones y agujeros de seguridad.

+0

gracias, pero todavía no entiendo cómo puedo saber si tengo permisos para escribir el archivo en el disco. – Aviadjo

+0

si lo intento y no tengo permisos supongo que el programa se colapsará y quiero evitarlo al marcar antes. ¿hay algún comando para verificar los permisos de escritura en el disco (escribir un nuevo archivo)? – Aviadjo

+2

¿Por qué debe colapsar su programa? : S –

5

Lo único razonable es intentar crear el archivo, y si falla, decirle al usuario que hubo un problema. Cualquier intento de prueba antes de tiempo, y solo tratar de crear el archivo si puede crearlo y escribirlo, está abierto a problemas de condiciones de carrera (tenía permiso cuando lo marcó, pero fue eliminado cuando lo intentó para usarlo, o viceversa) y casos de esquina (por ejemplo, tiene permiso para crear un archivo en ese directorio, pero intentar escribir allí excederá su cuota de disco). La única manera de saber es intentar ...

3

La forma más correcta de probar realmente el permiso de escritura de archivo es intentar escribir en el archivo. La razón de esto es porque diferentes plataformas exponen permisos de escritura de maneras muy diferentes. Peor aún, simplemente porque el sistema operativo le dice que puede (o no) escribir en un archivo, en realidad podría estar mintiendo, por ejemplo, en un sistema Unix, los modos de archivo podrían permitir la escritura, pero el archivo está en modo de solo lectura medios, o por el contrario, el archivo podría ser un dispositivo de caracteres creado por el kernel para uso propio del proceso, por lo tanto, aunque sus modos de archivo están establecidos en ceros, el kernel permite que ese proceso (y solo ese proceso) lo ensucie todo lo que le gusta

Cuestiones relacionadas