Szukanie ukrytych folderów

0

Piszę program który ma za zadanie znaleźć foldery które należą do odinstalowanych już programów. Najpierw wyszukiwane są foldery w program files i na podstawie tych wyników jest przeszukiwany folder "Documents and Settings" w którym takie same nazwy zbędnych folderów są np: w Dane aplikacji.

Problem w tym że poniższa procedura nie znajduje folderów ukrytych:

 public
   procedure ZnajdzFolder(Sciezka, NazwaFolderu : String);


function GetDirectoryName(Dir:String):String;
begin
if Dir[Length(Dir)] <> '\' then Result := dir + '\'
else Result := Dir;
end;

procedure TForm1.ZnajdzFolder(Sciezka,NazwaFolderu:String);
var
FSearchRec, DSearchRec : TSearchRec;
FindResult : Integer;
begin
Sciezka    := GetDirectoryName(Sciezka);
FindResult := FindFirst(Sciezka + NazwaFolderu, faDirectory, FSearchRec);
 try
  while FindResult = 0 do
    begin
     if ((FSearchRec.Attr and faDirectory) = faDirectory) and ((FSearchRec.Name <> '.') and (FSearchRec.Name <> '..')) then ListBox1.Items.Add(Sciezka + FSearchRec.Name);
     FindResult := FindNext(FSearchRec);
    end;

  Application.ProcessMessages;
  FindResult:=FindFirst(Sciezka+'*.*',faDirectory,DSearchRec);
  while FindResult=0 do
    begin
     if ((DSearchRec.Attr and faDirectory) = faDirectory) and ((DSearchRec.Name <> '.') and (DSearchRec.Name <> '..')) then ZnajdzFolder(Sciezka+DSearchRec.Name,NazwaFolderu);
     FindResult:=FindNext(DSearchRec);
    end;

 finally
  FindClose(FSearchRec);
  FindClose(DSearchRec);
 end;
end;

{Wywołanie}
ZnajdzFolder('C:\','Mozilla');

Jak mogę znaleźć także ukryte foldery ? [soczek]

0

faAnyFile w FindFirst zamiast faDirectory

0
Adamo napisał(a)

faAnyFile w FindFirst zamiast faDirectory

Niestety nie pomogło... dzięki Adamo że przynajmniej spróbowałeś pomóc [soczek]

Ale udało mi się rozwiązać problem dodając do faDirectory jeszcze faHidden.
To część w której zmieniłem:

//...
  Application.ProcessMessages;
  FindResult := FindFirst(Sciezka + '*.*', faDirectory + faHidden, DSearchRec);
  while FindResult = 0 do
//...
0

ale we wszystkich FindFirst, a poza tym to czasami nie znajduje ci tylko jednej pozycji a raczej niczego ? bo wynik FindNext przypisujesz do FindResult, a pętla trwa dopóki FindResult = 0, z tym że FindNext jeśli znajdzie kolejny plik to zwraca wartość różną od 0 (FindResult <> 0) - jedynie FindFirst zwraca 0 w przypadku znalezienia, winno być raczej:

if FindResult=0 then repeat
     if ((DSearchRec.Attr and faDirectory) = faDirectory) and ((DSearchRec.name <> '.') and (DSearchRec.name <> '..')) then ZnajdzFolder(Sciezka+DSearchRec.name,NazwaFolderu);
     FindResult:=FindNext(DSearchRec);
    until FindResult <> 0;

// do postu powyżej - nie wiem jakim cudem to zadziałało no ale jak już to może i znajdzie foldery i foldery z atrybutem ukrytym ale folderu z atrybutem systemowym albo tylko do odczytu już niestety nie, trza dać faDirectory or faHidden or faSystem or faReadOnly or faArchive albo wszystko w jednym (+ label ale to nie przeszkadza) czyli faAnyFile

1 użytkowników online, w tym zalogowanych: 0, gości: 1