PDA

Ver la Versión Completa : borrar archivos d un directorio\subdirectorios segun su extension. No me funciona :(


images
27-08-2004, 17:40:22
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):




//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:



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
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


MiDir:='C\CamTexto\Server\';


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


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
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
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 ?;)