Como tirar o atributo ´oculto´ de todas pastas de um drive??

Delphi

13/02/2004

Olá,

Estou com o seguinte problema: preciso fazer backup de todos os subdiretórios de alguns drivers do meu servidor, mas um deles possui todas as suas pastas ocultas. Sendo assim não consigo realizar o backup dessas pastas. Tentei então utilizar a funcão ´FileSetAttr(´x:\Financa´,0)´ para para que as pastas não fiquem ocultas e assim eu possa realizar o backup, mas eu gostaria de fazer isso com todas ao mesmo tempo. Tentei algo como ´FileSetAttr(´x:\*.*´,0)´ e ´FileSetAttr(´x:\*.*/s´,0)´, mas não deu certo.
Alguém pode me ajudar?
...outro detalhe, após realizar o backup tenho que ocultar todas as pastas novamente.

Agradeço desde já....


Marcela_m

Marcela_m

Curtidas 0

Respostas

Marcela_m

Marcela_m

13/02/2004

Ninguém pode me ajudar?


GOSTEI 0
Keitarosan

Keitarosan

13/02/2004

Desenvolvi essa rotina pro seu caso aqui, acho que vai funcionar bem:

Type  //Tipo criado para guardar info sobre o diretorio
  TDirInfo = record
    Diretorio: string;
    Atributo: Integer;
  end;


 //Se você usa o Delphi 5 igual a mim, necessita declarar esta biblioteca para que a função DirectoryExists seja reconhecido
  USES FileCtrl;


procedure TForm1.Button1Click(Sender: TObject);
var
  Criterio, Diretorio, PathAtual: string;
  Busca: TSearchRec;
  DirsList: array of TDirInfo;
  Attrs: Integer;
  Cont: Integer;

  procedure ChecarDirOcultos(Busca: TSearchRec);
  begin
    Diretorio := PathAtual + ´\´ + Busca.Name;
    Attrs := FileGetAttr(Diretorio);
    if DirectoryExists(Diretorio) and (Attrs <> 0) then
    begin
      SetLength(DirsList, Length(DirsList) + 1);
      DirsList[High(DirsList)].Diretorio := Diretorio;
      DirsList[High(DirsList)].Atributo := Attrs;

      FileSetAttr(Diretorio, 0);
    end;
  end;
begin
  Criterio := ´c:\*.*´;
  PathAtual := ExcludeTrailingBackslash(ExtractFileDir(Criterio));
  if FindFirst(Criterio, faDirectory or faHidden, Busca) = 0 then
  begin
    ChecarDirOcultos(Busca);
    while FindNext(Busca) = 0 do
      ChecarDirOcultos(Busca);
  end;

  // NESTE MOMENTO TODAS AS PASTAS ESTAO VISIVEIS
  //
  //
  //
  // INSIRA SEU CODIGO DE BACKUP DAS PASTAS NESSE ESPAÇO
  //
  // ESSA ROTINA SOMENTE CHECA OS SUBDIRETORIOS DA PASTA PRINCIPAL
  // ELE NÃO CHECA OS SUBDIRETORIOS DOS SUBDIRETORIOS, PARA ISSO
  // SERIA NECESSÁRIO MAIS UMA IMPLEMENTAÇÃO
  //
  //
  //
  // O CODIGO ABAIXO VOLTARÁ COM OS ATRIBUTOS ORIGINAIS DAS PASTAS

  for cont := 0 to High(DirsList) do
  begin
    FileSetAttr(DirsList[cont].Diretorio, DirsList[cont].Atributo);
  end;
end;


Com isso você pode setar qual pasta ou unidade desejada, ele vai setar todos os seus subdirs para visivel e logo em seguida vai voltar os atributos originais, entre a parte que dexa visivel e a que restaura os atributos voce pode usar sua rotina de backup ^__^

bom, acho que é isso :D
Espero ter ajudado


GOSTEI 0
POSTAR