Ver Mensaje Individual
  #1  
Antiguo 10-05-2011
WPascal WPascal is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 26
Reputación: 0
WPascal Va por buen camino
Problema al eliminar un archivo con funcion Deletefile

Hola, Estoy haciendo una aplicacion que busque los archivos y carpetas ocultas en la raiz de un disco y los desoculte, hasta ahi no tengo problema, pero también el programa debe borrar los accesos directos que encuentre, aqui es donde me está dando problema, lo estoy haciendo con la función deleteFile, pero no borra nada. Entonces quisiera que me ayudaran en que me estoy equivocando. En el form tengo un DriverComboBox1 con Name=disco y un button1.

El codigo es el siguente:

Código Delphi [-]
 
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, FileCtrl, StrUtils;
type
  TFPrincipal = class(TForm)
    Button1: TButton;
    Disco: TDriveComboBox;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  FPrincipal: TFPrincipal;
implementation
{$R *.dfm}
procedure listar1( sDirectorio: string; var Resultado1: TStringList );
var
  Busqueda: TSearchRec;
  iResultado: Integer;
begin
    iResultado :=  FindFirst( sDirectorio+':\'+'*.*', faAnyFile, Busqueda );
  while iResultado = 0 do
  begin
    if (busqueda.Attr=FaDirectory+FaHidden) or (busqueda.Attr=FaHidden) then{  (busqueda.Attr=FaDirectory) }
      begin
        Resultado1.Add(busqueda.Name);
      end;
      iResultado := FindNext( Busqueda );
  end;
  FindClose( Busqueda );
end;
procedure listar2( sDirectorio: string; var Resultado2: TStringList );
var
  Busqueda: TSearchRec;
  iResultado: Integer;
begin
  iResultado :=  FindFirst( sDirectorio+':\'+ '*.lnk', faArchive, Busqueda );
  while iResultado = 0 do
  begin
    if busqueda.Attr=faArchive  then
    begin
      Resultado2.Add(busqueda.Name);
    end;
    iResultado := FindNext( Busqueda );
  end;
  FindClose( Busqueda );
end;

procedure TFPrincipal.Button1Click(Sender: TObject);
var
a,b:Tstringlist;
i:integer; Unidad,x:String; Eli:Boolean;
begin
  Unidad:=Disco.Drive; //por ejemplo C
  a:=TstringList.Create; b:=TStringList.Create;
  listar1(Unidad,a); //en a:stringlist guardo los archivos y carpetas ocultos encontrados
  ShowMessage(a.Text);
  listar2(Unidad,b); //en b:stringlist guardo los archivos que sean .lnk
  ShowMessage(b.text);

  try
  for i:=0 to a.InstanceSize-1 do
  begin
    x:=Unidad+':\'+a[i];
    SetFileAttributes (PChar(x), FILE_ATTRIBUTE_NORMAL)
  end;
  for i:=1 to b.InstanceSize-1 do
  begin
    deleteFile(PChar(Unidad+':\'+b[i]));  //aqui es donde intento borrar los archivos .lnk
  end;
  except
    ShowMessage('listo!');
  end;
end;
end.
De antemano gracias por su ayuda.

Última edición por WPascal fecha: 10-05-2011 a las 14:32:46.
Responder Con Cita