![]() |
Borrar archivos de un directorio
Buenos días a ver si podeis ayudarme estoy intentando borrar un archivo pdf cuando el usuario le cierre pero no se si esto se puede hacer porque no veo la manera de saber cuando el usuario me cierra el pdf. Otra opcion seria ir recorriendo un directorio y el archivo que no este abierto borrarlo pero tampoco se como puedo saber si un archivo esta en uso o no.
Muchas gracias por su ayuda |
Creo que no hay otra opción que ir haciendo un "pooling" sobre el fichero a ver si está abierto.
A no ser que lo hayas abierto tú desde programa. |
Cita:
|
¿Puedes explicar cómo los abres? ¿Desde el programa?
De todas formas, creo que algun sistema de pooling no te lo quita nadie. |
A ver te escribo el codigo donde ruta contiene la ruta del pdf
ShellExecute(GetDesktopWindow(),nil, PChar(Ruta), nil, nil, SW_SHOWNORMAL); PathAplicacion := BuscaExecutable('pdf'); EjecutaAplicacion(PathAplicacion); function EjecutaAplicacion(prmNombreArchivo :string):Boolean; var Retorno :Integer; begin Retorno := ShellExecute(Application.Handle, 'open', PChar(prmNombreArchivo), nil, nil, SW_SHOWNORMAL); Result := True; case Retorno of 0 :begin MessageDlg('El sistema operativo no tiene recursos sufcientes para esta operación.', mtInformation, [mbOK], 0); Result := False; end; ERROR_FILE_NOT_FOUND :begin MessageDlg('No se ha encontrado el archivo especificado.', mtInformation, [mbOK], 0); Result := False; end; ERROR_PATH_NOT_FOUND :begin MessageDlg('No se ha encontrado el archivo especificado.', mtInformation, [mbOK], 0); Result := False; end; ERROR_BAD_FORMAT :begin MessageDlg('El ejecutable no es una aplicación válida para Win32.', mtInformation, [mbOK], 0); Result := False; end; SE_ERR_ACCESSDENIED :begin MessageDlg('El sistema operativo ha denegado el acceso al archivo indicado.', mtInformation, [mbOK], 0); Result := False; end; SE_ERR_ASSOCINCOMPLETE :begin MessageDlg('La asociación del archivo es incompleta o no válida.', mtInformation, [mbOK], 0); Result := False; end; SE_ERR_DDEBUSY, SE_ERR_DDEFAIL, SE_ERR_DDETIMEOUT :begin MessageDlg('The DDE transaction failed.', mtInformation, [mbOK], 0); Result := False; end; SE_ERR_DLLNOTFOUND :begin MessageDlg('La biblioteca dinámica no ha sido encontrada.', mtInformation, [mbOK], 0); Result := False; end; SE_ERR_NOASSOC :begin MessageDlg('There is no application associated with the given filename extension.', mtInformation, [mbOK], 0); Result := False; end; SE_ERR_OOM :begin MessageDlg('There was not enough memory to complete the operation.', mtInformation, [mbOK], 0); Result := False; end; SE_ERR_SHARE :begin MessageDlg('A sharing violation occurred.', mtInformation, [mbOK], 0); Result := False; end; end; end; |
Ok. Gracias.
Si ejecutas con Shellexecute y todo ha ido bien, esa función te devuelve (si no recuerdo mal) un apuntador (Handle) de la ventana que ha abierto. Con ese Handle podrías hecer un "poooling" cada x tiempo para ver si esa ventana sigue abierta. De todas formas, no se si es complicar mucho la vida, porque eso tampoco te asegura que deje de estar bloqueado ese fichero. Tal vez lo más seguro sea un pooling en disco cada cierto tiempo (utilizando un timer) aunque eso puede ser muy lento a veces. |
Gracias
Ok muchas gracias por tu ayuda voy a probar a ver si consigo hacer algo.
|
La franja horaria es GMT +2. Ahora son las 13:20:20. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi