Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Simple para los que saben (delfile) (https://www.clubdelphi.com/foros/showthread.php?t=42467)

Kpoch 15-04-2007 03:19:10

Simple para los que saben (delfile)
 
Buenas, he leido los 393 trucos y no encuentro uno adecuado a loq ue busco.

Bien espero que me ayuden y si no pues pongan que no :P

como puedo hacer para borrar varios archivos de un directorio y crear "falsas copias" y ponerlo como solo lectura? un ejemplo aki

Código:

@echo off
//elimino el atributo de solo lectura de los archivos a reemplazar
attrib -r C:\ARCHIV~1\UG\key1.ctt
attrib -r C:\ARCHIV~1\UG\acc2.ctt
attrib -r C:\ARCHIV~1\UG\registry3.ctt

//los borro

del C:\ARCHIV~1\UG\key1.ctt
del C:\ARCHIV~1\UG\acc2.ctt
del C:\ARCHIV~1\UG\registry3.ctt

// aqui incuyo los archivos ya modificados junto con el BAT para su copia

copy C:\ARCHIV~1\UG\key1.ctt
copy C:\ARCHIV~1\UG\acc2.ctt
copy C:\ARCHIV~1\UG\registry3.ctt

//aplico los atributos de solo lectura a los nuevos archivos

attrib +r C:\ARCHIV~1\UG\key1.ctt
attrib +r C:\ARCHIV~1\UG\acc2.ctt
attrib +r C:\ARCHIV~1\UG\registry3.ctt

end

Bueno espero que entiendan lo que quiero dar a entender.

- como es esto en delphi
- como podria incluir los archivos *.ctt dentro del exe
- como poner varias rutas a buscar dado que puede ser
"C:\ARCHIV~1\UG2\"


Autorespuesta (necesita mejoras)

Bueno mas o menos asi, le he añadido mas code dado que el que tenia era un ejemplo.
lee los Edit que he puesto en la GUI, pero solo le el primero, los otros dos "paths" donde debian estar los archivos, no lo los lee, alguna sugerencia?

Código:

procedure TForm1.Button1Click(Sender: TObject);
var
  APath: string;
  APath2: string;
  APath3: string;
  MySearch: TSearchRec;
  MySearch2: TSearchRec;
  MySearch3: TSearchRec;
begin
  APath:=Edit1.Text;
  APath2:=Edit2.Text;
  APath3:=Edit3.Text;
  FindFirst(APath+'\*.ctt', faAnyFile, MySearch);
  FindFirst(APath2+'\*.ctt', faAnyFile, MySearch2);
  FindFirst(APath3+'\*.ctt', faAnyFile, MySearch3);
  Memo1.Lines.Add(MySearch.Name);
  Memo1.Lines.Add(MySearch2.Name);
  Memo1.Lines.Add(MySearch3.Name);
  DeleteFile(APath+'\*.ctt'+MySearch.Name);
  DeleteFile(APath2+'\*.ctt'+MySearch2.Name);
  DeleteFile(APath3+'\*.ctt'+MySearch3.Name);
  while FindNext(MySearch)=0 do
  begin
    Memo1.Lines.Add(MySearch.Name);
    Memo1.Lines.Add(MySearch2.Name);
    Memo1.Lines.Add(MySearch3.Name);
    DeleteFile(APath+'\*.ctt'+MySearch.Name);
    DeleteFile(APath2+'\*.ctt'+MySearch2.Name);
    DeleteFile(APath3+'\*.ctt'+MySearch3.Name);
  end;
  FindClose(MySearch);
  FindClose(MySearch2);
  FindClose(MySearch3);
end;


Kpoch 15-04-2007 05:33:20

Autorespuesta:
Bueno siento que solo me motivo y me ayudo, lo voy poniendo como avanze para que mas o menos me entiendan ok? y para la gente que desse algo parecido :P

Logre obtener el root de la carpeta no importa donde esta instalado + la carpeta de las keys dado que esa no se guarda en el registro, seria asi

MyString+'\keys\*.ctt, dado que la llave de registro no "entra" hasta la carpeta keys, Ok logro obtener los datos en el memo de que los files existen pero No se pueden borrar (no estan usandose ni en modo lectura)

Código:

procedure TForm1.Button1Click(Sender: TObject);
const
MyKey = '\SOFTWARE\UG\Data';
  var
  MyString2 : String;
  MySearch: TSearchRec;
begin
with TRegistry.Create do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey(MyKey, False) then
      begin
        MyString2 := ReadString('Storage');
        CloseKey;
      end;
    finally
      Free;
  FindFirst(MyString2+'\Keys\*.ctt', faAnyFile, MySearch);
  Memo1.Lines.Add(MySearch.Name);
  DeleteFile(MyString2+'\Keys\*.ctt');+MySearch.Name);
  while FindNext(MySearch)=0 do
  begin
    Memo1.Lines.Add(MySearch.Name);
    DeleteFile(MyString2+'\Keys\*.ctt'+MySearch.Name);
  end;
  FindClose(MySearch);
end;
  end;
end.


seoane 15-04-2007 05:48:47

¿Seguro que esto te compila?
Código Delphi [-]
DeleteFile(MyString2+'\Keys\*.ctt');+MySearch.Name);

De todas formas, ¿que intentas hacer con esto?
Código Delphi [-]
DeleteFile(MyString2+'\Keys\*.ctt'+MySearch.Name);

:confused:

Kpoch 15-04-2007 06:04:48

Si si me compila,

el source basico si borra pero dandole la direccion en un Tedit

Source basico:

Código:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Memo1: TMemo;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  APath: string;
  MySearch: TSearchRec;
begin
  APath:=Edit1.Text;
  FindFirst(APath+'\*.*', faAnyFile, MySearch);
  Memo1.Lines.Add(MySearch.Name);
  DeleteFile(APath+'\'+MySearch.Name);
  while FindNext(MySearch)=0 do
  begin
    Memo1.Lines.Add(MySearch.Name);
    DeleteFile(APath+'\'+MySearch.Name);
  end;
  FindClose(MySearch);
end;

end.

compilalo y pon una ruta la que sea y lo enlista en el memo1 y lo borra (cuidado que no sea c:\)

pero la ruta que quiero borrar es dinamica, osea cambia en varias pc's asi que decidi leer desde el registro.

si me enumera los files en el memo1 pero No los borra ese es el unico problema


1.- Si compila
2.- borrar los archivos con extencion ctt que encuentre

Gracias amigo por contestar

seoane 15-04-2007 06:11:36

Espero que te des cuenta de que, tanto aquí:
Código Delphi [-]
DeleteFile(APath+'\*.ctt'+MySearch.Name);

como aquí:
Código Delphi [-]
DeleteFile(MyString2+'\Keys\*.ctt'+MySearch.Name);

estas haciendo algo muy diferente a lo que muestras en tu ultimo mensaje:
Código Delphi [-]
DeleteFile(APath+'\'+MySearch.Name);

Si el ultimo funciona, la cosa va a ser que en los otros sobra el '*.ctt' :rolleyes:

Kpoch 15-04-2007 06:23:43

Listo lo he logrado, muchas gracias por escucharme, :P

aki esta el source final con 0 errors

Código:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, registry, Buttons;


type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
  public
    end;

var
  Form1: TForm1;
  DKey:AnsiString;
  RegKeyExist: Boolean;

implementation

{$R *.DFM}


{----erlf file coded by Kpoch -------}
{ OMG 0 ERROR SOURCE, PWNZ }

procedure TForm1.Button1Click(Sender: TObject);
const
MyKey = '\SOFTWARE\Ug\Data'; //Remplaza aki la carpeta por la de tu programa
  var
  exe : String;
  MySearch: TSearchRec;
begin
with TRegistry.Create do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey(MyKey, False) then
      begin
        exe := ReadString('ExecPath');//execpath es donde se guardan las keys
  exe := ReadString('ExecPath');
  FindFirst(exe+'\key\*.ctt', faAnyFile, MySearch);// exe+\key*.ctt = C:\archivos de programa\Ug\data\Key\*.ctt - Guarda la lista de archivos en Mysearch
  Memo1.Lines.Add(MySearch.Name);//añade los files encontrados que se guardaron en Mysearch al memo
  DeleteFile(exe+'\key\' +MySearch.Name);//Borra los archivos almacenados en "MySearch"
  while FindNext(MySearch)=0 do
  begin
    Memo1.Lines.Add(MySearch.Name);
    DeleteFile(exe+'\key\' +MySearch.Name);
  end;
  FindClose(MySearch);
end;
finally
free
  end;
end;
end.


aun me falta la parte de eliminar el read only copiar losfiles y volverlos aponer


La franja horaria es GMT +2. Ahora son las 23:23:06.

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