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 16-09-2003
Mariana Mariana is offline
Miembro
 
Registrado: sep 2003
Posts: 50
Poder: 21
Mariana Va por buen camino
Question Borrar un directorio con contenido

Hola a todos, esta vez mi pregunta es si existe algún comando para borrar un directorio con todo su contenido, ya que con rmdir(), solo me permite borrar si no contiene nada.
Muchas Gracias.
Mariana
Responder Con Cita
  #2  
Antiguo 16-09-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Prueba con esta función:
Código:
procedure Tselecdir.borrarClick(Sender: TObject);
   procedure borradentro(directorio:string);
   var
     n:integer;
     Rbusqueda : TSearchRec;
   begin
     n := FindFirst(directorio+'\*.*',faanyfile, Rbusqueda);
     while n=0 do begin
        if (rbusqueda.Name <> '..') and
            (rbusqueda.Name <> '.') then begin
            if (rbusqueda.Attr = faDirectory) then begin
                borradentro(directorio+'\'+rbusqueda.Name);
                rmdir(directorio+'\'+rbusqueda.Name);
            end else
                deletefile(directorio+'\'+Rbusqueda.name) ;
         end;
        n := FindNext(Rbusqueda);
     end;

   end;
var
  diractivo:string;
begin
    //hago el de defecto el padre, sino.. error I/O16
   chdir('..');
   GetDir(0,diractivo);
   borradentro(DirectLB.directory );
   rmdir(DirectLB.directory);
   DirectLB.directory := diractivo;
end;
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 16-09-2003
CFPA86 CFPA86 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Medellin (Colombia)
Posts: 119
Poder: 21
CFPA86 Va por buen camino
Hola Mariana, si el codigo anterior no te funciona pruebe este.

procedure TForm1.Button1Click(Sender: TObject);
var
DirInfo: TSearchRec;
r : Integer;
begin
r := FindFirst('C:\Download\Test\*.*', FaAnyfile, DirInfo);
while r = 0 do begin
if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
(DirInfo.Attr and FaVolumeId <> FaVolumeID)) then
if DeleteFile(pChar('C:\Download\test\' + DirInfo.Name))
= false then
{Si no puede borrar el fichero}
ShowMessage('Unable to delete : C:\Download\test\' +
DirInfo.Name);
r := FindNext(DirInfo);
end;
SysUtils.FindClose(DirInfo);
if RemoveDirectory('C:\Download\Test') = false then
{Si no puedes borrar el directorio}
ShowMessage('Unable to delete dirctory : C:\Download\test');
end;

Espero te sirva.
__________________
Siempre hay un primer momento para todo.
Responder Con Cita
  #4  
Antiguo 15-09-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Solo para agregar un poco de código al "repositorio" del foro, recién desarrollé esto:
Código Delphi [-]
procedure DeleteDir(APath: string);
var
  sr: TSearchRec;
begin
   APath := IncludeTrailingBackslash(APath);
   if FindFirst(APath + '*.*', faAnyFile, sr) = 0 Then
     repeat
       if (sr.Name <> '..') and (sr.Name <> '.') then
       begin
         if (sr.Attr = faDirectory) then
           DeleteDir(APath + sr.Name)
         else
           Win32Check(SysUtils.DeleteFile(APath + sr.Name));
       end;
     until FindNext(sr) <> 0;

   SysUtils.FindClose(sr);
   APath := ExcludeTrailingBackslash(APath);
   Win32Check(RemoveDir(APath));
end;

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 15-09-2004
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
Pues otro más para la colección:

Código Delphi [-]
uses ShellApi;

procedure RemoveFolder(Folder: String);
var
  FileInfo: TShFileOpStruct;

begin
  FileInfo.Wnd := 0;
  FileInfo.wFunc := FO_DELETE;
  FileInfo.pFrom := PChar(Folder);
  FileInfo.pTo := nil;
  FileInfo.fFlags := FOF_NOERRORUI or FOF_NOCONFIRMATION;

  ShFileOperation(FileInfo);
end;

// Saludos
Responder Con Cita
  #6  
Antiguo 21-02-2008
serg serg is offline
Miembro
 
Registrado: may 2007
Posts: 12
Poder: 0
serg Va por buen camino
Correción de código

nada que ver
disculpa

Última edición por serg fecha: 23-02-2008 a las 00:26:53.
Responder Con Cita
  #7  
Antiguo 21-02-2008
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
No entendi..... ¿hay algún cambio a mi código?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 22-02-2008
serg serg is offline
Miembro
 
Registrado: may 2007
Posts: 12
Poder: 0
serg Va por buen camino
Cita:
Empezado por delphi.com.ar Ver Mensaje
No entendi..... ¿hay algún cambio a mi código?

NO, ES SOLO QUE ME EQUIVOQUÉ
PERDÓN.
PERO SI TENGO UN PROBLEMA.
NO PUEDO BORRAR EL DIRECTORIO SI RECIEN ESCRIBÍ UN ARCHIVO EN ÉL, SUPONGO QUE DEBO LIBERARLO DE MEMORIA ANTES, PORQUE WINDOWS ME DICE QUE HAY OTRO PROGRAMA USANDOLO. EL CODIGO QUE USÉ ES ESTE:
Cita:
codigo delphi[-]
procedure TFmain.RemoveFolder(folder:string);
var
sr: TSearchRec;
n: Integer;
begin
n:=FindFirst(folder+'\*.*', faAnyFile, sr);
while n=0 do
begin
if (sr.Name <> '..')and(sr.Name <> '.')
then
begin
if not(sr.Attr = faDirectory)
then
deletefile(folder+'\'+sr.name) ;
end;
n := FindNext(sr);
end;
SysUtils.FindClose(sr);
folder := ExcludeTrailingBackslash(folder);
if DirectoryExists(folder) then
Win32Check(RemoveDir(folder));
end;
GRACIAS DE ANTEMANO

Última edición por serg fecha: 22-02-2008 a las 18:14:12.
Responder Con Cita
  #9  
Antiguo 26-02-2008
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
No vas a poder borrar una carpeta si no puedes borrar todos los archivos contenidos por ella, y no podrás borrar un archivo si esta en uso. Si tu programa lo esta usando solo tienes que cerrar el archivo. Muchas veces sucede que hay diálogos que tienen abiertas carpetas, entonces algunas versiones de windows no te dejan borrar estos directorios por ese motivo, otra precaución puede ser cambiar el currentpath de la aplicación.

Saludos!

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #10  
Antiguo 27-02-2008
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.267
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
Truco 232.

NOTA: Hoy estoy vago.
__________________
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
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


La franja horaria es GMT +2. Ahora son las 07:57:20.


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