Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Borrar archivos de un directorio (https://www.clubdelphi.com/foros/showthread.php?t=49742)

nelem 29-10-2007 09:01:45

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

Neftali [Germán.Estévez] 29-10-2007 10:58:47

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.

nelem 29-10-2007 12:16:07

Cita:

Empezado por Neftali (Mensaje 241889)
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.

Hola los archivos les guardo yo en disco y les abro. Pero no se como puedo saber el momento que me le cierran.

Neftali [Germán.Estévez] 29-10-2007 12:44:49

¿Puedes explicar cómo los abres? ¿Desde el programa?
De todas formas, creo que algun sistema de pooling no te lo quita nadie.

nelem 29-10-2007 13:41:26

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;

Neftali [Germán.Estévez] 29-10-2007 14:07:48

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.

nelem 29-10-2007 16:04:00

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