Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Borrar Carpeta (https://www.clubdelphi.com/foros/showthread.php?t=88028)

jbecerra 06-04-2015 17:10:36

Borrar Carpeta
 
Hola a todos...quería hacer una consulta.. ¿Existe alguna función que permita eliminar una carpeta y todo su contenido?
Estuve probando por ejemplo "removedir" y también "rmdir" y no me funcionaron. Tal vez lo apliqué mal.
¿me podrán dar una ayudita?
saludos.-

jbecerra 06-04-2015 18:09:20

Probé también con DeleteDirectory y solo me borró el contenido de la carpeta...pero no la carpeta en sí. Yo quisiera poder borrar todo junto en un solo paso :)

jbecerra 06-04-2015 18:28:12

Ya lo solucione :)

ecfisa 06-04-2015 18:53:54

Hola jbecerra.
Cita:

Empezado por jbecerra (Mensaje 490834)
Ya lo solucione :)

¿ Como lo hiciste ?

Saludos :)

Casimiro Notevi 06-04-2015 19:46:03

Cita:

Empezado por jbecerra (Mensaje 490834)
Ya lo solucione :)

Cita:

GUÍA ALTERNATIVA
  1. No te preocupes por dónde colocar tus preguntas. A nosotros nos encanta abrir todos los mensajes sin importar en qué foro estén.
  2. Ni pienses qué título ponerle a tu mensaje. "Tengo una duda" es suficiente para que nosostros entendamos que estás en problemas.
  3. Cuando te aparezca un mensaje de error, no te molestes en decirnos cuál es. Nos encanta tratar de adivinar.
  4. Cuando publiques código no te preocupes porque quede bien presentado. Nosotros distinguimos perfectamente los bloques sin necesidad de ninguna indentación.
  5. Si tienes un problema con bases de datos no es necesario que nos digas qué motor usas, nosotros sabemos la respuesta para cualquiera de ellos.
  6. Si no se entiende lo que preguntas, ni te molestes en aclarar. Nos fascinan los misterios.
  7. No te esfuerces en oprimir F1. Nosotros ya lo hemos hecho y podemos darte la respuesta más rápido.
  8. La opción de búsqueda en los foros sólo está para adornar la página. Es divertidísimo contestar una y otra vez lo mismo.
  9. ¿Google? Eso es para nerds como nosotros.
  10. Ante un problema, no te molestes en tratar de entenderlo. Nosotros ya nos hemos quemado las pestañas por ti y estamos felices de escribirte el código.
  11. Si te plase, eskribe con kas y faltas de hortografia. Komo nosotros no entramos a los chats nos hencanta pensar ke estamos en 1.
  12. Si en cinco minutos nadie te ha contestado, siéntete en libertad de abrir cuantos hilos puedas para preguntar lo mismo. Tú no mereces ese trato.
  13. Nunca des las gracias. Nos encanta responder sin más aliciente que ver nuestro nombre escrito.
  14. Cuando escribas un mensaje, siéntete en libertad de no volver en tres semanas. Nosotros estaremos aquí resolviendo tu problema.
  15. Si eres nuevo, acláralo desde el principio. Con eso basta para que nosotros resolvamos tu problema. Tú aún no puedes consultar la ayuda.
  16. Si alguien te remite a la guía de estilo, no te molestes en leerla. Tú tienes cosas más importantes que hacer y a fin de cuentas, nadie la lee.
  17. Si encuentras la solución tú mismo, no te molestes en explicarla. Bastará con un "Ya lo resolví, gracias". Nos emociona ver gente autosuficiente.
  18. No dudes en pedir que te envíen la solución a tu correo. El foro está sólo para los ociosos y tú no tienes tiempo que perder.


...........


.

nlsgarcia 06-04-2015 20:32:49

jbecerra,

Cita:

Empezado por jbecerra
...¿Existe alguna función que permita eliminar una carpeta y todo su contenido?...Ya lo solucione...

:confused:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShellAPI;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function DeleteDirectory(const DirectoryName: String) : Boolean;
var
   SR: TSearchRec;
begin
   try
      if FindFirst(DirectoryName + '\*.*', faAnyFile, SR) = 0 then
      repeat
         if (SR.Attr and faDirectory = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then
            DeleteDirectory(IncludeTrailingPathDelimiter(DirectoryName) + SR.Name);

         if (SR.Attr and faArchive = faArchive) then
            DeleteFile(DirectoryName + '\' + SR.Name);
      until FindNext(SR) <> 0;
      RemoveDir(DirectoryName);
      Result := False;
   finally
      FindClose(SR);
      Result := True;
   end;
end;

function RemoveFolder(const FolderName : String) : Boolean;
var
   SI: TSHFileOpStructA;
begin
   with SI do
   begin
      Wnd := HInstance;
      wFunc := FO_DELETE;
      pFrom := PChar(FolderName + #0);
      pTo := nil;
      fFlags := FOF_NOCONFIRMATION or FOF_SILENT;
   end;
   SHFileOperation(SI);
   if not SI.fAnyOperationsAborted then
      Result := True
   else
      Result := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if DeleteDirectory('C:\TestRemoveFolder1') then
      MessageDlg('Directorio Removido Satisfactoriamente',mtInformation,[mbok],0)
   else
      MessageDlg('Error en Delete de Directorio',mtError,[mbok],0)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   if RemoveFolder('C:\TestRemoveFolder2') then
      MessageDlg('Directorio Removido Satisfactoriamente',mtInformation,[mbok],0)
   else
      MessageDlg('Error en Delete de Directorio',mtError,[mbok],0)
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Permite remover de forma recursiva un directorio del sistema de archivos de Windows por medio de dos funciones distintas pero equivalentes a nivel funcional.

Revisa este código:
Código Delphi [-]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
   DirectoryName : String;

begin

  DirectoryName := 'C:\TestRemoveFolder';

  if DirectoryExists(DirectoryName) then
  begin
     DeleteDirectory(DirectoryName,True);
     RemoveDir(DirectoryName);
     MessageDlg('Directorio Removido',mtInformation,[mbok],0)
  end
  else
     MessageDlg('Directorio No Existe',mtError,[mbok],0)

end;

end.
El código anterior en Lazarus Versión 1.2.6 FPC Version 2.6.4 bajo Windows 7 Professional x32, Permite remover de forma recursiva un directorio del sistema de archivos de Windows.

Te sugiero revisar nuevamente la Guía de estilo de los foros.

¡Gracias por tu cooperación! :) ^\||/

Saludos,

Nelson.

Neftali [Germán.Estévez] 07-04-2015 11:16:54

Cita:

Empezado por jbecerra (Mensaje 490834)
Ya lo solucione :)

Estaría bien poner la solución aquí (para el próximo que llegue a este hilo).
:confused::confused:

pacopenin 07-04-2015 20:16:39

A todos nos hace feliz que lo hayas resuelto, pero ¿vas a dejarnos asi? :(:confused::confused:


La franja horaria es GMT +2. Ahora son las 17:11:21.

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