Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   borrar archivos d un directorio\subdirectorios segun su extension. No me funciona :( (https://www.clubdelphi.com/foros/showthread.php?t=13704)

images 27-08-2004 17:40:22

borrar archivos d un directorio\subdirectorios segun su extension. No me funciona :(
 
Hola :)

Investigando sobre como eliminar archivos de un determinado directorio y por la extension del archivo he encontrado estos dos ejemplos(uno en trucomania(gracias de nuevo ;) y otro aqui):


Código Delphi [-]
 
 //Añade 'ShellApi' en el uses de tu form
 
 Function ALaPapelera(Fichero:string):boolean;
 
 var
 
  FileOp:TSHFileOpStruct;
 
 begin
  if FileExists(Fichero) Then
   Begin
     FillChar(FileOp,SizeOf(FIleOp),#0);
     With FileOp do
      Begin
       Wnd:=Application.Handle;
       WFunc:=FO_DELETE;
       pFrom:=PChar(Fichero+#0#0);
       fFlags:=FOF_SILENT or FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
      End;
     Result:=(ShFileOperation(FileOp)=0);
   End Else
        Result:=False;
 End;
 
 //Ejemplo de llamada
 
 
 Procedure FTForm1.Button1Click(Sender:TObject);
 Begin
  if Not ALaPapelera('C:\Pruebas\Fichero.txt') Then
    ShowMessage('No se pudo borrar el fichero');
 End;

Pues resulta que este codigo me funciona, elimina el archivo pero me muestra el Message 'No
se pudo....'

Esto me ocurre en Windows XP.


Investigando mas encontre este otro que es mas lo que yo quiero: Eliminar de un directorio
todos los archivos de una determinada extension. Aqui va el codigo:


Código Delphi [-]
 procedure TForm1.Button2Click(Sender:TObject);
 
 Var
  
  MiDir:String;  // Donde están los ficheros
  MisFicheros:String;  //Cadena que contiene el nombre con comodines
  RBusqueda:TSearchRec;  //Está definida en la unidad SysUtils
 
 Begin
  MiDir:='C\CamTexto\Server\';
  MisFicheros:='_*.lck';
  
 If FindFirst(MiDir+MisFicheros,faanyfile, RBusqueda)=0 Then
  Begin
   DeleteFile(PChar(MiDir+RBusqueda.Name));  //Borro el primero si existe
 
     //Busco todos los del mismo patrón y los borro
     While FindNext(RBusqueda)=0 Do
      Begin
       DeleteFile(PChar(MiDir+RBusqueda.Name));
      End;
 
    //Ambas funciones devuelven 0 si la búsqueda tiene éxito
  End;
 End;


Este codigo no me funciona :( no me borra nada ¿por que? Este es el que me interesa de verdad
por el tema de la aplicacion en red con paradox q estoy haciendo. Para eliminar los archivos
de bloqueo en caso de que la aplicacion no se haya cerrado correctamente.

Lo genial seria poder indicarle un directorio principal(el de tu aplicacion) y borrara todos
los *.XXX de ese directorio y todos sus subdirectorios.

roman 27-08-2004 18:21:53

Cita:

Empezado por images
Este codigo no me funciona :( no me borra nada ¿por que?

¿Has hecho una traza de la ejecución para ver si realmente encuentra el archivo?

En

Código Delphi [-]
MiDir:='C\CamTexto\Server\';

faltan los ':' después de la 'C', y en

Código Delphi [-]
MisFicheros:='_*.lck';

¿qué no sobra el '_'?

// Saludos

images 27-08-2004 19:33:36

Ya me funciona!

Resulta que eran los dos puntos despues de la unidad 'C:\', vaya! siento haber puesto el hilo por una chorrada asi, perdon.

Pero el guion bajo antes del comodin si es necesario. Si no lo pones no funciona.

_*.lck

Gracias :)

mikelgaldakao 05-06-2007 15:36:30

Cita:

Empezado por images
Lo genial seria poder indicarle un directorio principal(el de tu aplicacion) y borrara todos
los *.XXX de ese directorio y todos sus subdirectorios.

Lo primero presentarme que soy nuevo por aqui :-). Alguien sabe como hacer esto ?? lo demas tambien me funciona perfectamente pero lo realmente interesante seria lo de los subdirectorios.
No me refiero a copiar subdirectorios , sino a copiar los *.xxx de todos los subdirectorios.
salu2!

ixMike 11-06-2007 20:00:26

Sería cuestión de buscar los subdirectorios mediante la función FindFirst, y llamar a la función tantas veces como haga falta.

mikelgaldakao 11-06-2007 23:14:30

Cita:

Empezado por ixMike
Sería cuestión de buscar los subdirectorios mediante la función FindFirst, y llamar a la función tantas veces como haga falta.

Muchas gracias por contestar! serias tan amable de intentar exponermelo con un ejemplo ?;)


La franja horaria es GMT +2. Ahora son las 14:12:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi