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 01-02-2011
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Como borrar los archivos de la carpeta Windows\Temp\

Hola a todos
estoy haciendo un sencillo soft para borrar el contenido de la carpeta Windows\Temp\ pero sucede que cuando hay un archivo en uso, da error y aborta la operacion
Lo que necesito es la forma de que si esto sucede, ignore el archivo en uso y continue borrando el siguiente, sin abortar la operación

el codigo que uso para esto es un aporte de escafandra en DA

Código Delphi [-]
uses ShellApi;
 
function XDelete(Path: String): integer;
var
  FS: SHFILEOPSTRUCT;
begin
  ZeroMemory(@FS, sizeof(SHFILEOPSTRUCT));
  FS.wFunc:= FO_DELETE;
  FS.pFrom:= PCHAR(Path + #0);
  FS.fFlags:= FOF_NOCONFIRMATION;
  Result:= SHFileOperation(FS);
end;

Código Delphi [-]
XDelete('C:\Windows\Temp\*.*');
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes
Responder Con Cita
  #2  
Antiguo 01-02-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
A mi me funciona algo como esto (además puedes hacerlo recursivo):

Código Delphi [-]
var
  TS:TStringList;
  i:Integer;
begin

  try
    TS := TStringList.Create();
    FindFiles('c:\windows\temp', '*.*', True, TS);
    for i := 0 to (TS.Count - 1) do begin
      DeleteFile(TS[i]);
    end;
  finally
    FreeAndNil(TS);
  end;

La función FindFiles se puede encontrar en la sección de trucos del club.

Código Delphi [-]
procedure FindFiles(StartDir, FileMask: string; recursively: boolean; var FilesList: TStringList);
var
  SR: TSearchRec;
  DirList: TStringList;
  IsFound: Boolean;
  i: integer;
const
  CHAR_BACKSLASH = '\';
  MASK_ALL_FILES = '*.*';
  CHAR_POINT = '.';
begin
  if (StartDir[length(StartDir)] <> CHAR_BACKSLASH) then begin
    StartDir := StartDir + CHAR_BACKSLASH;
  end;

  // Crear la lista de ficheos en el directorio StartDir (no directorios!)
  IsFound := FindFirst(StartDir + FileMask, faAnyFile - faDirectory, SR) = 0;
  // MIentras encuentre
  while IsFound do  begin
    FilesList.Add(StartDir + SR.Name);
    IsFound := FindNext(SR) = 0;
  end;

  FindClose(SR);

  // Recursivo?
  if (recursively) then begin
    // Build a list of subdirectories
    DirList := TStringList.Create;
    // proteccion
    try
      IsFound := FindFirst(StartDir + MASK_ALL_FILES, faAnyFile, SR) = 0;
      while IsFound do
      begin
        if ((SR.Attr and faDirectory) <> 0) and
          (SR.Name[1] <> CHAR_POINT) then
          DirList.Add(StartDir + SR.Name);
        IsFound := FindNext(SR) = 0;
      end;
      FindClose(SR);

      // Scan the list of subdirectories
      for i := 0 to DirList.Count - 1 do
        FindFiles(DirList[i], FileMask, recursively, FilesList);
    finally
      DirList.Free;
    end;
  end;
end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 02-02-2011
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Hola neftali
Probe tu codigo y no me funciona como esperaba, pues no me elimina algunos archivos que no estan en uso
Me doy cuenta de eso porque despues de ejecutar el programa trate de eliminar manualmente los que dejó y se eliminaron sin dar error

Tambien pase el StringList para un ListBox para ver que archivos almacena para borrar y hay archivos en la lista que no borra, tampoco la mayoria de las carpetas (que no estan en uso porque se borraron manualmente bien)

No se si es que no esta siendo recursivo, o que sucede
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes
Responder Con Cita
  #4  
Antiguo 02-02-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por JoAnCa Ver Mensaje
Probe tu codigo y no me funciona como esperaba, pues no me elimina algunos archivos que no estan en uso
¿Tienen algo de especial esos archivos?
Yo lo he probado y me funciona perfectamente (excepto con los que están en uso y los que están en ReadOnly).
¿Puede ser por algo relacionado con los atributos?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 02-02-2011
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
debe ser que el antivisrus trabaja de fondo escaneando, cuando esto pasa mantiene un par de archivos en temp, el problema es que al estar abiertos no se pueden borrar, la mejor opcion sería borar uno a uno, si no puede hacerlo que lo ignore, osea, poner el try dentro del for.
__________________
mas confundido que Garavito el día del Niño.
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
Como saber la ubicacion de la carpeta Windows JoAnCa API de Windows 3 10-12-2010 17:23:18
Borrar archivos dentro de carpeta ØnLy Varios 1 23-11-2010 06:36:55
Como eliminar una carpeta y todos sus archivos? Ayudaa Supra Varios 5 15-07-2008 14:12:43
Obtener el Path de TEMP de windows sin ~ apicito OOP 5 09-04-2008 16:27:46
como obtener el numero de archivos que contiene una carpeta Javi2 Varios 1 15-07-2004 12:03:21


La franja horaria es GMT +2. Ahora son las 11:03:31.


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