Ir al contenido


Foto

Problema con los atributos


  • Por favor identifícate para responder
4 respuestas en este tema

#1 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 08 septiembre 2011 - 12:49

Buenas amigos de delphiacces, quisiera si me pueden
dar la mano en un dilema, lo que ocurre es que me gustaría
saber como poner y quitar atributos a varios archivos y
carpetas de un mismo lugar o en el lugar en donde esta el programa,

para cada archivo o carpeta lo hago de la siguiente manera:




delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin 
  3.   fileSetAttr('miarchivo.mio', 1+2+4);  // este funciona
  4. end;




ó así también lo hago:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin 
  3.   fileSetAttr('miarchivo.mio', faReadOnly); //este también funciona
  4. end;




Pero cuando intento hacerlo de la siguiente manera para varios archivos
no sale nada:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin 
  3.   fileSetAttr('*.*', 1+2+4); // no me funciona este comodín
  4. end;


ó:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin 
  3.   fileSetAttr('..\*.*', 1+2+4); // no me funciona este comodín
  4. end;




Por lo cual les pido una mano....
  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 08 septiembre 2011 - 04:47

Pues más que cambiarle los atributos a todo de un sólo golpe supongo que tendrás que hacerlo uno por uno  ^o|

...creo...  :D

Saludox ! :)

Dale una revisadita a este enlace  (y)

  • 0

#3 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 11 septiembre 2011 - 12:27

Gracias por responder, pero sino fuera mucha molestia no me podrían poner un ejemplito............
gracias. :)
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 12 septiembre 2011 - 07:35

Pues te daré una pista ya que no tengo Delphi o Lazarus en mano (ya que vienen siendo lo mismo), Colocas un Opendialog y activas la propiedad Multiple Select a true, luego en un ciclo for cuentas los archivos seleccionados y le vas asignando los atributos uno a uno.

O algo más avanzado:



delphi
  1. procedure AsignarAtributos (const Path, Mask : string; Attr: Integer);
  2. var
  3.   Result    : integer;
  4.   SearchRec : TSearchRec;
  5. begin
  6.   Result := FindFirst(Path + Mask, faAnyFile - faDirectory, SearchRec);
  7.   while Result > 0 do
  8.   begin
  9.     FileSetAttr (Path + SearchRec.name, Attr);
  10.     Result := FindNext(SearchRec);
  11.   end;
  12.   FindClose(SearchRec);
  13. end;



Donde:

Path := Ruta del archivo o archivos
Mask := Mascara (*.*, Algo.*, *.exe, etc etc)
Attr := Los atributos que quieres colocar o eliminar

Hago constar que lo hice de memoria asi que puede tener algunos fallos.

Saludos
  • 0

#5 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 12 septiembre 2011 - 08:09

Vamos a tratar resolver la cuestión con una función recursiva:



delphi
  1. procedure SetAttribute(Path: String; dwFileAttributes: DWORD; SubDir: boolean = false);
  2. var
  3.   A:  integer;
  4.   sr: TSearchRec ;
  5.   FileName, Dir: String;
  6. begin
  7.   A:= FileSetAttr(PCHAR(Path), dwFileAttributes);
  8.   Dir:= ExtractFileDir(Path) + '\';
  9.   FileName:= ExtractFileName(Path);
  10.   if FileName = '' then FileName:= '*.*';
  11.   if (Dir <> '') and (FindFirst(Dir + FileName, faAnyFile, sr) = 0) then
  12.   repeat
  13.     if (sr.Name <> '.') and (sr.Name <> '..') then
  14.     begin
  15.       A:= FileSetAttr(PCHAR(Dir + sr.Name), dwFileAttributes);
  16.       if (sr.Attr and faDirectory) <> 0  then
  17.         if SubDir then SetAttribute(Dir + sr.Name + '\', dwFileAttributes, true);
  18.     end;
  19.   until (FindNext(sr) <> 0);
  20.   FindClose(sr);
  21. end;



El parémetro SubDir sirve para explorar en los subdirectorios de la ruta dada.

Ejemplo de uso:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   SetAttribute('d:\hola\*.bmp', faArchive, true);
  4. end;



Saludos.

  • 0




IP.Board spam blocked by CleanTalk.