Ver Mensaje Individual
  #8  
Antiguo 01-07-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Juan Carlos
como puedo cambiar los atributos de esta despues de que hayan sido copiados?
Pues ya te había dado una sugerencia ¿no?

Pero ahí te va:

Código Delphi [-]
(*
  Cambia el atributo de sólo lectura

  Folder - carpeta a cambiar (ruta completa)
  ReadOnly -
    true para poner a todos los archivos de sólo lectura
    false para quitar el atributo a todos los archivos

  La rutina procesa recursivamente todas las subcarpetas
*)
procedure ChangeReadOnlyAttr(Folder: String; ReadOnly: Boolean);
var
  SearchRec: TSearchRec;

begin
  if FindFirst(Folder + '\*.*', faAnyFile, SearchRec) = 0 then
    repeat
      if (SearchRec.Attr and faDirectory) = faDirectory then
      begin
        if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
          ChangeReadOnlyAttr(Folder + '\' + SearchRec.Name, ReadOnly);
      end
      else if ReadOnly then
        FileSetAttr(Folder + '\' + SearchRec.Name, SearchRec.Attr or faReadOnly)
      else
        FileSetAttr(Folder + '\' + SearchRec.Name, SearchRec.Attr and not faReadOnly);
    until FindNext(SearchRec) <> 0;
end;

Y por si te surge la inquietud aquí te va una generalización de la rutina anterior:

Código Delphi [-]
(*
  Pone y/o quita atributos a los archivos de una carpeta
  y todas sus  subcarpetas

  Folder - carpeta a cuyos archivos deseamos cambiar atributos
  SetAttr - combinación de atributos que deseamos poner
  RemoveAttr - combinación de atributos que deseamos quitar
*)
procedure ChangeAttr(Folder: String; SetAttr, RemoveAttr: Integer);
var
  SearchRec: TSearchRec;
  Attributes: Integer;

begin
  if FindFirst(Folder + '\*.*', faAnyFile, SearchRec) = 0 then
    repeat
      if (SearchRec.Attr and faDirectory) = faDirectory then
      begin
        if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
          ChangeAttr(Folder + '\' + SearchRec.Name, SetAttr, RemoveAttr);
      end
      else
      begin
        Attributes := (SearchRec.Attr or SetAttr) and not RemoveAttr;
        FileSetAttr(Folder + '\' + SearchRec.Name, Attributes);
      end;
    until FindNext(SearchRec) <> 0;
end;

La anterior rutina la usarías así:

Código Delphi [-]
// Pone atribúto de sólo lectura y quita los de oculto y de sistema
ChangeAttr(Folder, faReadOnly, faHidden or faSysFile);

// Pone los atributos de sólo lectura y de sistema, no quita ninguno
ChangeAttr(Folder, faHidden or faSysFile, 0);

Creo que eso resuelve tus dudas.

// Saludos
Responder Con Cita