Consulta Acceso Denegado para borrar archivos

147 views
Skip to first unread message

Marcelo Barberis

unread,
Oct 26, 2023, 10:04:44 PM10/26/23
to publicesvfoxpro
Buenas noches, he armado un proceso para copiar archivos de una carpeta A hacia una carpeta B, para este caso estoy usando esto:

loFileSystem  = CREATEOBJECT("Scripting.FileSystemObject")
IF VARTYPE(loFileSystem) <> "O"
         RETURN .F.
ENDIF

y usando un proceso de SCAN - ENDSCAN realizo el copiado de archivos de la carpeta A hacia la carpeta B, usando este proceso

loFileSystem.CopyFile(lcXMLArc,lcDestino,.T.)

al final del proceso de copia de archivos uso este codigo para cerrar el objeto
loFileSystem = .NULL.

hasta ahi todo esta bien se realiza correctamente, mi problema aparece despues de esta linea cuando deseo borrar todos los archivos de la carpeta A, usando este codigo

lcFolderXML = ADDBS(SYS(5) + CURDIR()) + "XML_OFFLINE\"
DELETE FILE(lcFolderXML + "*.*")
RD (lcFolderXML)

El mensaje de error me indica ACCESO DENEGADO archivo1.xml, como que el archivo1.xml estuviera siendo usado por otro programa y por eso me deniega el acceso para su borrado, ahora cerrando mi aplicativo y volviendo abrir el aplicativo y para pruebas he colocado un boton en alguna parte de mi aplicativo con el codigo
lcFolderXML = ADDBS(SYS(5) + CURDIR()) + "XML_OFFLINE\"
DELETE FILE(lcFolderXML + "*.*")
RD (lcFolderXML)
dicho codigo funciona sin problea, procede a borrar todos los archivos sin problema alguna y despues borra la carpeta vacia, por lo que puedo darme cuenta que este proceso loFileSystem  = CREATEOBJECT("Scripting.FileSystemObject"), se mantiene activo y tanto la carpeta A y los archivos que estan dentro los mantiene SIN ACCESO o Bloqueados, porque si cierro mi aplicativo y lo vuelvo abrir mi proceso de borrar se ejecuta sin problema, solo me da acceso a borrar si cierro mi aplicativo no asi si cierro la ventana donde ejecuto el loFileSystem  = CREATEOBJECT("Scripting.FileSystemObject").

Mi consulta es si existe alguna forma de cerrar el proceso loFileSystem  = CREATEOBJECT("Scripting.FileSystemObject") despues de copiar los archivos porque debo 1.- borrar los archivos de la carpeta A. 2.- debo borrar la carpeta A. Esta orden pareciera que no funciona loFileSystem = .NULL.

Desde ya de antemano agradesco cualquier comentario que me pueda ayudar a solucionar
--
Marcelo Barberis Gutierrez
Sistemas Informaticos
Villa Montes - Bolivia
Telef.: +591-76830544

Ignacio Debole

unread,
Oct 26, 2023, 11:12:09 PM10/26/23
to publice...@googlegroups.com
hola Marcelo
te recomiendo borrar archivo por archivo y seguir usando el objeto Scripting.FileSystemObject el método DeleteFile()
Con Adir() vas a cargar los archivos de la Carpeta A y con un for a ese nuevo array creado con Adir() borrás archivo x archivo y ahí quizás salte cuál es el archivo que te da el problema.
También puede ser que haya archivos ocultos o de sistema en esa carpeta, o que estén en uso por algún programa. Por eso al hacerlo uno x uno vas a encontrar el problema.




--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/CAMUm0dkjrDN2PcFfo9nmSzEeMMEWWEdr%3D2PXdpLbgFEeLdiNBg%40mail.gmail.com.

Cristian Novoa

unread,
Oct 26, 2023, 11:23:21 PM10/26/23
to Comunidad de Visual Foxpro en Español
*------------------------------------------------------------------------------------------------------
PROCEDURE borrar_carpeta(tcCarpeta)

LOCAL nTotCarpetas, i, cNomCarpeta
LOCAL ARRAY aCarpetas(1,1)


tcCarpeta = ADDBS(tcCarpeta)
nTotCarpetas = Adir(aCarpetas, tcCarpeta+"*.*", "D")


For i = 1 To nTotCarpetas
IF aCarpetas[i,1]!="." AND aCarpetas[i,1]!=".."
cNomCarpeta = tcCarpeta + aCarpetas[I,1]

borrar_carpeta(cNomCarpeta)

TRY
RMDIR (cNomCarpeta)
CATCH
ENDTRY
ENDIF
NEXT

borrar_arch_carpeta(tcCarpeta)

RETURN

*------------------------------------------------------------------------------------------------------
PROCEDURE borrar_arch_carpeta(tcCarpeta)

LOCAL nTotArchivos, i, cNomArchivo


tcCarpeta = ADDBS(tcCarpeta)
nTotArchivos = Adir(aArchivos, tcCarpeta+"*.*")


For i = 1 To nTotArchivos
cNomArchivo = tcCarpeta + aArchivos[I,1]

TRY
Delete File (cNomArchivo)
CATCH
ENDTRY
NEXT

RETURN

Zarlu

unread,
Oct 27, 2023, 7:36:27 PM10/27/23
to Comunidad de Visual Foxpro en Español
Buenas tardes Marcelo!

"RELEASE loFileSystem"

Me parece que antes de copiar y borrar  creas, editas o trabajas con el archivo .XML que deseas borrar.
Entonces creo que lo que está pasando es que aunque se pueda realizar la copia no puedes borrarlo porque el archivo está en uso
Podrías probar a omitir el copiarlo y sólo borrarlo a ver que pasa. Si aún así no se puede borrar habrás confirmado que el problema no es el copiado.

Suerte
zarlu
Chetumal, Quintana Roo, México

Walter Valle

unread,
Oct 27, 2023, 11:14:16 PM10/27/23
to Comunidad de Visual Foxpro en Español
Hola Marcelo,

Solo por si acaso... 
1) Los archivos los que pretender borrar están en alguna carpeta respaldad en la nube como Dropbox, OneDrive o GoogleDrive? De ser así, por ahí puede venir tu problema.
2) Haz que tu antivirus tenga dicha carpeta excluida de revisión, si esto te funciona, ya sabrás que esta molestando.

Saludos,

Walter Valle
San Pedro Sula, Honduras.

Marcelo Barberis

unread,
Oct 28, 2023, 2:46:22 AM10/28/23
to publice...@googlegroups.com
hola buenas noches, les comento, mi objetivo es copiar todos los archivos de la carpeta A hacia la carpeta B despues de eso debo borrar todos los archivos de la carpeta A y cuando este vacia la carpeta A debo borrarla, eso es todo lo que debo hacer. Los archivos que estan en la carpeta A todos son .xml, que puede ser 1 o varios, dichos archivos nose abren y nada por el estilo y el proceso que realizo es este:
1.- loFileSystem  = CREATEOBJECT("Scripting.FileSystemObject")
2.- loFileSystem.CopyFile(lcXMLArc,lcDestino,.T.)
este es el mensaje de error que me aparece

Imagen de WhatsApp 2023-10-19 a las 20.44.37_22709ee9.jpg

pero bueno estare probando las sugerencias que estuvieron indicandome

De antemano muchas gracias por su tiempo y comentarios

Ignacio Debole

unread,
Oct 28, 2023, 9:25:51 AM10/28/23
to publice...@googlegroups.com
Marcelo, probá ejecutando VisualFox como Administrador y desde ahí abrí el proyecto y ejecutá ese proceso en cuestión.
Si se borra todo, significa que tenés un tema de permisos de Windows sobre esa carpeta.
Saludos


Zarlu

unread,
Oct 28, 2023, 3:17:25 PM10/28/23
to Comunidad de Visual Foxpro en Español
Buenas tardes Marcelo!

Antes de la rutina de copiado de archivos pon estas líneas: (Quizá debas cambiar "Reciente" por "Recent")

vArchivo=ADDBS(GETENV("USERPROFILE"))+"Reciente"
RUN /N EXPLORER.EXE /open,&vArchivo

Si aparece el archivo que da problemas entonces podría estar abierto por alguna rutina de tu aplicación o por alguna aplicación.

Suerte
zarlu
Chetumal, Quintana Roo, México

Ramón Rodríguez Martínez

unread,
Oct 29, 2023, 4:33:53 PM10/29/23
to Comunidad de Visual Foxpro en Español
Prueba a Verificar que tu archivo no esté en uso por otro proceso utilizando
IF FOPEN(lcXMLArc ,0) <>  -1 THEN
.
.
ELSE
   MessageBox("El archivo esta abierto en otro proceso ",16,"Cuidado")
   RETURN .F.
ENDIF

Otra recomendación es que siempre te ocupes de cerrar cada handle de los XML abiertos
Reply all
Reply to author
Forward
0 new messages