Comprobar permisos en una carpeta específica desde VFP.

322 views
Skip to first unread message

Edgar Acevedo

unread,
Sep 25, 2013, 4:22:12 AM9/25/13
to publice...@googlegroups.com, Edgar Acevedo
Saludos respetables expertos:

Por largas razones que no quiero viene al caso explicar en detalle, tengo una aplicación que a veces necesita escribir un archivo en la carpeta C:\WINDOWS\SYSTEM32.

Mi pregunta: ¿De qué forma puedo hacer que mi programa pregunte si el actual usuario del mismo tiene permiso de escribir un archivo en cualquier carpeta que yo le indique?

Me gustaría poder hacer una función que me pudiera funcionar algo así como esto:

?  TienePermiso("C:\WINDOWS", "Write") 

Como quien dice poder preguntar: ¿El usuario actual tiene el permiso "Write" en la carpeta "C:\WINDOWS" ?

Gracias por atender a mi consulta, saludos


Edgar Acevedo

P.D.

Por cierto, buscando en PortalFox (mil gracias al Maestro Luis María por mantener este estupendo portal), encontré un programa llamado "HasPrivileges.PRG" que NO HACE exactamente lo que busco ya que NO me permite indicarle una carpeta en particular, pero me devuelve los privilegios específicos que yo le pregunte al usuario actual.

Ahora bien, esta búsqueda en PortalFox me llevó a esta página con unas cosas interesantes para VFP (que al menos yo, no las conocía).  La página en mención es:   http://www.foxpert.com/downloads.htm

Ricardo Pina

unread,
Sep 25, 2013, 8:20:38 AM9/25/13
to Grupo VFP
Hola Edgar
 
Puedes hacerlo a lo bruto!!
Intenta escribir atrapando el error, si pudo tiene permiso en contrario mensajito que no tiene permiso.
 
Saludos
--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Analyzer

unread,
Sep 25, 2013, 4:32:23 PM9/25/13
to publice...@googlegroups.com, Edgar Acevedo
En este enlace hay una función de Christof Wollenhaupt para revisar si el usuario tiene permiso de escritura en alguna carpeta.


Nota. No soy "experto", solo te ayudo a buscar una solución..

Saludos!

Edgar Acevedo

unread,
Sep 26, 2013, 1:57:49 AM9/26/13
to publice...@googlegroups.com
Muchísimas gracias amigos por su atención.  Les contesto puntualmente:

Ricardo:

Efectivamente... Ya tenía el asunto bajo control mediante un TRY ... ENDTRY.  Lo que pasa es que yo buscaba algo mas elegante que me pudiera servir a otros propósitos mas adelante.  Afortunadamente, ANALYZER me envió un link donde esta justo la función que andaba buscando.  Gracias por tu atención.

Analyzer:

Muchísimas gracias por el link que me compartiste, es justamente lo que buscaba. Creo que no lo encontré porque busqué mediante las palabras equivocadas.  La función que el Sr. Christof Woolenhaupt compartió tan generosamente es una maravilla.  Me funcionó muy bien en XP.  Ahora me falta probar como funciona en Win 7 y Win 8.
Muchísimas gracias por tu interés en mi consulta.

Saludos compañeros,


Edgar Acevedo.

Fernando D. Bozzo

unread,
Sep 26, 2013, 6:12:43 AM9/26/13
to publice...@googlegroups.com, Edgar Acevedo
Hola Edgar, yo uso el método de Ricardo :-)

Te dejo las funciones que uso en mis librerías:

FUNCTION Verificar_Creacion(tcDir, tcTempFile)
    LOCAL lnHandle
, llRetorno
    lnHandle    
= FCREATE(ADDBS(tcDir) + tcTempFile)
    IF lnHandle
> -1
        llRetorno
= .T.
        FCLOSE
(lnHandle)
    ENDIF

    RETURN llRetorno
ENDFUNC


FUNCTION
Verificar_Lectura(tcDir, tcTempFile)
    LOCAL lnHandle
, llRetorno
    lnHandle    
= FOPEN(ADDBS(tcDir) + tcTempFile, 0) && Sólo Lectura-Buffered
    IF lnHandle
> -1
        llRetorno
= .T.
        FCLOSE
(lnHandle)
    ENDIF

    RETURN llRetorno
ENDFUNC


FUNCTION
Verificar_Modificacion(tcDir, tcTempFile)
    LOCAL lnHandle
, llRetorno
    lnHandle    
= FOPEN(ADDBS(tcDir) + tcTempFile, 1) && Sólo Escritura-Buffered
    IF lnHandle
> -1
        IF FPUTS
(lnHandle, 'TEST') > 0
            llRetorno
= .T.
        ENDIF
        FCLOSE
(lnHandle)
    ENDIF

    RETURN llRetorno
ENDFUNC


FUNCTION
Verificar_Busqueda(tcDir, tcTempFile)
    LOCAL lnHandle
, laDir(1,1), llRetorno
    IF ADIR
(laDir, ADDBS(tcDir) + tcTempFile) > 0
        llRetorno
= .T.
    ENDIF

    RETURN llRetorno
ENDFUNC


FUNCTION
Verificar_Eliminacion(tcDir, tcTempFile)
    LOCAL lnHandle
, lcOnError, llError, llRetorno
    TRY
        ERASE
(ADDBS(tcDir) + tcTempFile)
    CATCH
    ENDTRY
    IF NOT FILE
(ADDBS(tcDir) + tcTempFile)
        llRetorno
= .T.
    ENDIF
    RETURN llRetorno
ENDFUNC


NOTA: Para la función de verificar_eliminación(), se debe ejecutar antes la de creación, que deja un archivo temporal que esta intenta eliminar.


Saludos.-
Message has been deleted

Fernando D. Bozzo

unread,
Sep 26, 2013, 6:17:23 AM9/26/13
to publice...@googlegroups.com, Edgar Acevedo
NOTA 2: Todas las funciones que puse se deben usar secuencialmente en el orden que las puse, ya que una aprovecha el resultado de la otra.


Saludos.-
Reply all
Reply to author
Forward
0 new messages