Problem z katalogowaniem - HELP!

0

Witam,
Na tym forum pisze po raz pierwszy, wiec liczę na wyrozumiałość,
mam nadzieje ze mnie nikt nie zjedzie jak przypadkiem to co potrzebuje już gdzieś na forum jest. (przeszukuje je już praktycznie od dwóch dni, i jak na razie nic nie znalazłem).
A teraz do rzeczy. potrzebuje taki program który wyświetli mi zawartość, plików i katalogów na wybranym dysku. (wybór dysku przez np. DriveComboBox, ale to jest mało ważne, bo nie w tym problem).

To co na razie wymodziłem:
//-----------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
sr : TSearchRec;
szuk : Integer;
temp : string;

// ”sciezka” – jest zmienną globalną, jest wcześniej wczytywana
// i wygląd na poczatku np. tak: c:\

begin
szuk:=FindFirst(sciezka+'.',faAnyFile,sr);
while(szuk=0) do
begin
if sr.Attr=faDirectory then //jezeli "plik" jest katalogie to
begin
if (sr.Name<>'.') and (sr.Name<>'..') then
begin
listbox1.Items.Add(sciezka+'[ '+sr.Name+' ]');
temp:=sciezka;
sciezka:=sciezka+sr.Name+'';
button1.Click;
sciezka:=temp;
end;
end
else
listbox1.Items.Add(sciezka+sr.Name);
szuk:=FindNext(SR);
end;
FindClose(SR);
end;
//-----------------------------------------------------------

Program niby działa, bez problemu wyświetla zawartość dysków twardych, wszystkie katalogi i pliki.
Nie wiem tylko dlaczego jak chcę wczytać zawartość płyty cd, to program nie rozpoznaje katalogów, wyświetla tylko te katalogi i plik co są w głównym katalogu.
Aha przy sprawdzaniu dysków, jeden katalog tj. "Program Files" tez traktuje jak plik i nie sprawdza dalej co jest w jego środku.

! Jak ktoś wie dlaczego tak jest to będę wdzięczny za odpowiedź !

Ps. Sorki ze aż tyle naskrobałem, ale chciałem jasno przedstawić w czym jest problem.

// jakim cudem działa Ci ten kod? wywołujesz funkcję button1.Click rekurencyjnie nie podając żadnych wymaganych argumentów! 8-0 - ŁF

0

Widzisz, na płytkach difoltowo wszystkie (absolutnie, nawet label) pliki mają dodatkowo atrybut readonly. Kumasz? Zmień linijkę:

if sr.Attr=faDirectory then //jezeli "plik" jest katalogie to

na:

if(sr.Attr and faDirectory)>0 then //jezeli "plik" jest katalogie to

I będzie działało również z kalogami z atrybutem hidden i sysfile. Dopiero teraz program będzie działał prawidłowo i bedzie wyświetlał wszystkie podkatalogi np. z katalogu windows. :-) czego wcześniej nie robił (printhood, pif, spool i inne ukryte)

0

SUPER [hurra]
BIG THX za tak szybką odpowiedź, właśnie o to mi chodziło, teraz działa jak należy.

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