consulta como controlar o saber si un archivo existe

487 views
Skip to first unread message

Marcelo Barberis

unread,
Nov 19, 2021, 5:16:15 PM11/19/21
to publicesvfoxpro
Hola buenas tardes, tengo un primer proceso donde en una linea de programacion me crea un archivo txt basado en una informacion, pero debido al tamaño de la informacion esta creacion del archivo txt aveces tiene una cierta demora en tiempo para su creacion, pero a la vez necesito tener este txt porque ahi me trae informacion que necesito para realizar un segundo proceso, mi tema es que como los procesos internos en vfp se realizan tan rapido en milesimas de segundos, al ejecutarse la segunda linea la cual hace referencia que necesita el txt para extraer la informacion, me salta el error que el archivo txt no existe, eso es porque cuando se ejecuto la segunda linea el txt todavia no se ha creado todavia.
lo que hago es esto:
1.- Ejecuto primer procedimiento -->> generacion de un txt (resultados.txt) por el volumen de informacion 5 gestiones tiene una demora
2.- Ejecuto segundo procedimiento -->> revisar resultados.txt UPPS no existe resultados.txt

La demora en tiemp no es fija, porque si la informacion es poca el tiemp es minimo por lo que es variable la demora

Mi consulta: Hay alguna forma de controlar esto..???

Nota, para mis procesos que estoy haciendo si o si terminan creando un archivo de texto, todavia no he podido generar en variable, pues debido que en algunos casos esta informacion es muy grande.

Algun comentario se los agradeceria

--
Marcelo Barberis Gutierrez
Sistemas Informaticos
Villa Montes - Bolivia
Telef.: +591-76830544

Zarlu

unread,
Nov 19, 2021, 5:45:37 PM11/19/21
to Comunidad de Visual Foxpro en Español
Buenas tardes Marcelo!

Saber como generas el txt ayudaría.
- Si es con línea de comandos podrías, quizá, configurar que espere finalizar para continuar con el código. o Generar el archivo log y validarlo
- Poner un tiempo de espera al terminar, la rutina, para verificar la existencia del txt
- Mandar a un memo y ya que termine la rutina enviarlo al txt
.....

Suerte
zarlu
Chetumal, Quintana Roo, México

AZOK

unread,
Nov 19, 2021, 7:53:43 PM11/19/21
to publice...@googlegroups.com

Saludos a todos, mucha salud en sus entornos

Estoy con la loca idea de incluir en un ".exe" que estoy programando el wizard "WZQUERY.APP" del visual foxpro V5.0 para generar querys.

Al ejecutarlo me envía el siguiente mensaje

Alguna sugerencia o recomendación para no tener que programas algo similar :-)

Excelente fin de semana.


Víctor Hugo Espínola Domínguez

unread,
Nov 19, 2021, 8:10:18 PM11/19/21
to publice...@googlegroups.com
La mejor sugerencia que puede recibir es: Olvida que existen wizards, aprende SQL!

Saludos,
Víctor.
Lambaré - Paraguay.



--
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/4a6af8b6-7637-ae75-434a-63dcce4c9bd1%40gmail.com.

Fernando Mora

unread,
Nov 19, 2021, 10:32:50 PM11/19/21
to Comunidad de Visual Foxpro en Español
Podrías usar una función para saber si existe el archivo y si esta disponible (poderlo leer), te paso dos funciones que hacen esas tareas. 

lcFile="la ruta de archivo a verificar si existe y si esta disponible"
lnIntentos=0
lbOk=.T.
Do While FileExists(lcFile)=.F.
WaitSeconds(1)
lnIntentos=lnIntentos+1
If lnIntentos=5
lbOk=.F.
Exit
EndIf
EndDo
*-- Si lbOk es .T. el archivo esta disponible. 


Function FileExists()
Lparameters tcFilePath As String
Local I,J,K,nHandle
nHandle = Fopen(tcFilePath,12)
*-- si lo pudo abrir
If nHandle > 0
*-- obtiene el tamaño del archivo
J=Fseek(nHandle,0,2)
*-- ubica el puntero en el inicio
=Fseek(nHandle,0,0)
For I=1 To J
K=Fread(nHandle,1)
Next
=Fclose(nHandle)
Return .T.
Else
Return .F.
EndIf
EndFunc

Function WaitSeconds()
Lparameters tiSeconds As Integer
Local lnRest, lnSec
If Vartype(tlSeconds)<>"N"
tiSeconds = 1
EndIf
lnSec = Seconds()
Do While .T.
lnRest = Seconds() - lnSec
If lnRest > tiSeconds
Exit
EndIf
EndDo
EndFunc

El viernes, 19 de noviembre de 2021 a la(s) 17:16:15 UTC-5, alexm...@gmail.com escribió:

Antonio Meza

unread,
Nov 20, 2021, 9:10:54 AM11/20/21
to Comunidad de Visual Foxpro en Español
Prueba el siguiente código que utilizo para guardar archivos generados desde VFP en la base de datos, tenia el problema que el archivo aun no estaba generado y no se guardaba como lo que comentas.

Desde luego tienes que adaptar a tus variables y procesos, lo que hace la rutina realmente es sencillo, dentro de un ciclo DO WHILE se verifica con FILE() si un archivo existe y la ruta completa con el nombre del archivo esta en la variable _pdf_archivo, debes cambiar por tu variable que contiene la ruta y nombre, si lo encuentra se termina el ciclo, y si el usuario presiona ESC se cancelar para no bloquear el programa.

CLEAR TYPEAHEAD
WAIT windows "Generando archivo PDF, espere un momento ... (Esc para Cancelar)" NOWAIT NOCLEAR
_salir = 0
DO WHILE .t.
_salir = INKEY()
IF FILE( _pdf_archivo )
_salir = 1
exit
ENDIF
IF _salir = 27
exit
ENDIF
ENDDO

WAIT clear

IF _salir = 1
* Archivo listo, lo que necesites hacer, en mi caso aquí mando a guardar
ELSE
* Usuario cancelo con ESC
ENDIF

saludos
Antonio Meza

HernanCano

unread,
Nov 20, 2021, 10:24:36 AM11/20/21
to Comunidad de Visual Foxpro en Español
Antonio:
Me parece (me parece) que a esta propuesta tuya se le debe ajustar algo más, pues mientras el archivo es creado la función FILE() devuelve .t., pero aún no está disponible para ser usado (en cuyo caso FOPEN() diría falso o... se puede comportar mejor).
¿Será que debo probar otra vez? Lo haré.......

HernanCano

unread,
Nov 20, 2021, 10:30:11 AM11/20/21
to Comunidad de Visual Foxpro en Español
Fernando:
Me gusta tu propuesta, así lo hago yo.

Pero quisiera saber ¿por qué debiera ser necesario el ciclo FOR para FREAD? ¿No debeira ser suficiente saber que el FOPEN() devuelve negativo para saber si falló o no? Algo como

Function FileExists()
Lparameters tcFilePath As String
Local I,J,K,nHandle
nHandle = Fopen(tcFilePath,12)
*-- si lo pudo abrir
If nHandle > 0
************-- obtiene el tamaño del archivo
***********J=Fseek(nHandle,0,2)
************-- ubica el puntero en el inicio
***********=Fseek(nHandle,0,0)
***********For I=1 To J
*********** K=Fread(nHandle,1)
***********Next
=Fclose(nHandle)
Return .T.
Else
Return .F.
EndIf
EndFunc

Luis Maria Guayan

unread,
Nov 25, 2021, 2:10:58 PM11/25/21
to Comunidad de Visual Foxpro en Español
Con ésta función sabrás si el archivo existe y está listo

FUNCTION IsFileReady(tcFile)
  lnHnd = FOPEN(tcFile, 12)
  IF lnHnd < 0
    * No existe o no está listo
    llRet = .F.
  ELSE
    * Si existe y está listo
    llRet = .T.
  ENDIF
  FCLOSE(lnHnd)
  RETURN llRet
ENDFUNC

La deberías poner en un ciclo hasta que te retorne .T. cuando el archivo exista y esté listo para procesar

Luis María Guayán
Tucumán, Argentina
_______________________________

Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

Esteban Bastida

unread,
Nov 26, 2021, 8:54:14 AM11/26/21
to publice...@googlegroups.com

Luis Maria; no es para solicitarte ayuda; sino para agradecerte todos los generosos y valiosos aportes de tus conocimientos, que has dado y continuas dando de nuestra querida, amigable, potente y sólida herramienta Visual Fox Pro.

Aproveche haberte visto en el blog, ya que nunca te he contactado y volverte a agradecer por varios de tus útiles ejemplos y soluciones que he utilizado.

Saludos.

Esteban Bastida.

Neuquén.

--

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.

Luis Maria Guayan

unread,
Nov 26, 2021, 9:29:26 AM11/26/21
to Comunidad de Visual Foxpro en Español
Gracias Esteban
Reply all
Reply to author
Forward
0 new messages