Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-02-2006
rex rex is offline
Miembro
 
Registrado: dic 2003
Posts: 81
Poder: 21
rex Va por buen camino
Borrar archivos

Hola a todos como puedo borrar varios ficheros a la vez, es decir que pueda borrar todos los ficheros que tengan la extension .tmp??
Responder Con Cita
  #2  
Antiguo 07-02-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Busca acerca de ShFileOperation

// Saludos
Responder Con Cita
  #3  
Antiguo 07-02-2006
rex rex is offline
Miembro
 
Registrado: dic 2003
Posts: 81
Poder: 21
rex Va por buen camino
gracias tambien me sirvio el 85 de trucomania
Responder Con Cita
  #4  
Antiguo 07-02-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Psee... Bonito truco que también hubieras encontrado aquí en el club, aunque yo prefiero éste:

Código Delphi [-]
var
  FileInfo: TShFileOpStruct;

begin
  FileInfo.Wnd := Handle;
  FileInfo.wFunc := FO_DELETE;
  FileInfo.pFrom := 'C:\Ruta\Con\Los\Archivos\*.cds';
  FileInfo.pTo := nil;
  FileInfo.fFlags := FOF_NOCONFIRMATION;

  ShFileOperation(FileInfo);
end;

// Saludos
Responder Con Cita
  #5  
Antiguo 07-02-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno, Román, me gusta más el método que propones, pero, ciertamente en el truco de TrucoMania se hace uso de la recursividad... esto es, se borran los archivos contenidos en un directorio y en los subdirectorios de este. Yo he tratado de llevar a cabo algo similar haciendo uso de lo que propones, que me sigue pareciendo mejor, pero, después de unas cuantas vueltas tengo algo que, si bien parece funcionar (so pena de las revisiones que sean menester), no sé yo si termina siendo "mejor" o "peor" que el truco de TrucoMania...

Código Delphi [-]
uses
  Windows, SysUtils, ShellApi;

function BorrarArchivos(const directorioRaiz, extension: string;
  const borrarRecursivamente, podraDeshacerse: boolean) : boolean;

  function Borrar(const directorios: string) : boolean;
  var
    opciones: Word;
    operacion: TSHFileOpStruct;
  begin
    FillChar(operacion, SizeOf(operacion), #0);
    opciones := FOF_MULTIDESTFILES or
      FOF_NOCONFIRMATION or FOF_SILENT;
    if (podraDeshacerse) then
      opciones := opciones or FOF_ALLOWUNDO;
    operacion.wFunc := FO_DELETE;
    operacion.fFlags := opciones;
    operacion.Wnd := GetDesktopWindow;
    operacion.pFrom := PChar(directorios);
    result := (ShFileOperation(operacion) = 0);
  end;

var
  sDirs: string;
  SR: TSearchRec;
begin
  result := false;
  sDirs := EmptyStr;
  if not DirectoryExists(directorioRaiz) then
    Exit;
  if borrarRecursivamente then
  begin
    sDirs := directorioRaiz +'\*.'+ extension +#0;
    FindFirst(directorioRaiz +'\*.*', faDirectory, SR);
    repeat
      if ((SR.Attr and faDirectory) = faDirectory)
        and (SR.Name <> '.') and (SR.Name <> '..') then
          sDirs := sDirs + directorioRaiz +'\'+ SR.Name +'\*.'+ extension +#0;
    until (SysUtils.FindNext(SR) <> 0);
    SysUtils.FindClose(SR);
    Result := Borrar(sDirs);
  end
  else // Borrar solo archivos del directorio raiz
    Result := Borrar(directorioRaiz +'\*.'+ extension +#0);
end;
Me ha traído un poco de cabeza lo siguiente, puesto que no parece funcionar del todo bien, pero, con esos errores extraños... dice que no encuentra un determinado archivo, que no puede borrarlo, sin embargo, el archivo existe y no sé qué puede pasar. Me explico con lo de error extraño. La función anterior va bien con una carpeta y "dos o tres" subcarpetas con archivos ".tmp". Todo perfecto. Pero si son "diez o doce" carpetas nanai de la china... "No se puede borrar Archivo. No se encuentra el disco..."

Código Delphi [-]
function BorrarArchivos(const directorio, extension:
  string; const podraDeshacerse: boolean) : boolean;

  function Borrar(const dirInt: string) : boolean;
  var
    flags: Word;
    fOp: TSHFileOpStruct;
  begin
    FillChar(fOp, SizeOf(fOp), #0);
    flags := FOF_NOCONFIRMATION or FOF_SILENT;
    with fOp do
    begin
      pTo := nil;
      wFunc := FO_DELETE;
      Wnd := GetDesktopWindow;
      pFrom := PChar(dirInt+'\*.'+extension);
      if (podraDeshacerse) then
        flags := flags or FOF_ALLOWUNDO;
      fFlags := flags;
    end;
    result := (ShFileOperation(fOp) = 0);
  end;

var
  SR: TSearchRec;
begin
  Borrar(directorio);
  FindFirst(directorio+'\*.*', faDirectory, SR);
  repeat
    if ((SR.Attr and faDirectory) = faDirectory)
      and (SR.Name <> '.') and (SR.Name <> '..') then
        Borrar(directorio +'\'+ SR.Name);
  until (FindNext(SR) <> 0);
  SysUtils.FindClose(SR);
end;

Probé con un pequeño "Delay" entre que borraba subcarpeta y subcarpeta, pero, al cabo me quedo con la primera función, que no parece tener problemas con más de 40 carpetas repletas de archivos "*.tmp" conque lo he probado. De todos modos me queda la duda de si será mejor al cabo esta función, insisto, con todos los retoques oportunos, o el truco de TrucoMania, con todos los retoques oportunos también. Bueno. No importa. Me entretuve un rato.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 07-02-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Caray, pues por más que leo y releo el susodicho truco, no veo donde está la recursividad, aunque en todo caso faltaría solo "un pelín" y ciertamente no sé si ShFileOperation opere recursivamente.

// Saludos
Responder Con Cita
  #7  
Antiguo 07-02-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Caray, pues por más que leo y releo el susodicho truco, no veo donde está la recursividad, aunque en todo caso faltaría solo "un pelín" y ciertamente no sé si ShFileOperation opere recursivamente.
Bueno, es que llevas razón: el truco no opera de forma recursiva. Debí relacionar en mi cabeza ideas que no tenían nada que ver con lo que nos ocupa, acaso, y al compañero que inició el Hilo tal vez la recursividad se la trae al fresco.

Por otro lado, hasta donde llego yo (y después de un par de pruebas o dos, nomás) "ShFileOperation" no opera recursivamente, salvo que se haga como lo hize en la primera función que antes copié.

Me explico, "ShFileOperation" cuenta con un campo "fFlags" que admite varios valores, como sabes. Pues bien, añadiendo el valor "FOF_MULTIDESTFILES", el campo "pFrom" de "ShFileOperation" (y también el campo "pTo", pero no lo usamos para lo que nos ocupa) admite varios caminos, varias rutas de directorios con las que vernos las caras.

Esa es la recursividad que creo soporta "ShFileOperation", en el sentido de que si te fijas en las funciones de más arriba, en realidad se hace uso de "ShFileOperation" una sola vez, salvo que indicando varias rutas de directorios y subdirectorios de los cuales queremos borrar ciertos archivos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 08-02-2006
Avatar de cirilungol
cirilungol cirilungol is offline
Miembro
 
Registrado: feb 2006
Posts: 42
Poder: 0
cirilungol Va por buen camino
Y en red?

Hay alguna manera de borrar archivos desde un pc a otro?
Responder Con Cita
  #9  
Antiguo 08-03-2012
Avatar de zeta2
zeta2 zeta2 is offline
Miembro
 
Registrado: feb 2007
Posts: 95
Poder: 18
zeta2 Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Psee... Bonito truco que también hubieras encontrado aquí en el club, aunque yo prefiero éste:

Código Delphi [-]var FileInfo: TShFileOpStruct; begin FileInfo.Wnd := Handle; FileInfo.wFunc := FO_DELETE; FileInfo.pFrom := 'C:\Ruta\Con\Los\Archivos\*.cds'; FileInfo.pTo := nil; FileInfo.fFlags := FOF_NOCONFIRMATION; ShFileOperation(FileInfo); end;


// Saludos

Me salta un error al definir la variable.
TShFileOpStruct El error es el siguiente:

[Error] Unit1.pas(93): Undeclared identifier: 'TSHFileOpStruct'
[Error] Unit1.pas(96): Missing operator or semicolon
[Error] Unit1.pas(97): Missing operator or semicolon
[Error] Unit1.pas(98): Missing operator or semicolon
[Error] Unit1.pas(99): Missing operator or semicolon
[Error] Unit1.pas(100): Missing operator or semicolon
[Error] Unit1.pas(102): Undeclared identifier: 'ShFileOperation'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'


Este error me impide ejecutar el programa. Que puede ser?

Saludos.
Responder Con Cita
  #10  
Antiguo 08-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola zeta2.

En cuanto al error "Undeclared identifier", lo solucionás agregando:
Código Delphi [-]
uses ShellApi;
Para los restantes ( Missing operator or semicolon ) tendría que ver tu código.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
borrar archivos d un directorio\subdirectorios segun su extension. No me funciona :( images API de Windows 5 11-06-2007 23:14:30
Borrar y renombrar archivos. zugazua2001 Varios 5 08-07-2005 02:45:44
borrar archivos trabuc Varios 1 17-10-2004 13:36:07
Borrar varios archivos mrmanuel Varios 5 27-05-2004 02:03:54
Borrar archivos de un directorio Magneto Varios 1 13-08-2003 13:20:34


La franja horaria es GMT +2. Ahora son las 03:28:01.


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
Copyright 1996-2007 Club Delphi