Błędna procedura

0

Witam,

Jest pole CheckListBox a w nim pliki i foldery w postaci:

c:*.*
d:*.*
C:\text.txt
c:\folder1*.*
c:\folder1\folder2*.*
itd.

Pliki(foldery) te chcę przepisać do ListVieW (składa się ona z kolumn: nazwa, ścieżka, czas, rozmiar)

Jednak wypisują się głupoty. Błędnie podany jest czas i rozmiar oraz kilka razy powtarzane są błędne dane np. jednego pliku(folderu)

Oto procedura:

  • początek

procedure TForm1.BitBtn5Click(Sender: TObject);
var
DR,SR : TSearchRec;
Found, FoundFile, i : Integer;
ListItem : TListItem;
FullName, FullPath: String;

begin

for i := 0 to CheckListBox2.Items.Count - 1 do

  begin
  FullName:= ExtractFileName(CheckListBox2.items[i]);
  FullPath:= ExtractFilePath(CheckListBox2.items[i]);


  Found := FindFirst(IsDir(FullPath)+ '*.*', faDirectory, DR); 

while Found = 0 do
begin

if ((DR.Attr and faDirectory) = faDirectory)  // sprawdza, czy pozycja jest katalogiem
and ((DR.Name  '.') and (DR.Name  '..'))

then

begin

        ListItem:=ListView1.Items.Add;
        ListItem.Caption:=(FullName);
        ListItem.SubItems.Add(IsDir(FullPath));
        ListItem.SubItems.Add(DateTimeToStr(FileDateToDateTime(Dr.Time)));
        ListItem.SubItems.Add(IntToStr(Dr.Size));


   FoundFile := FindFirst(IsDir(FullPath), faDirectory, SR);

  while FoundFile = 0 do
  begin

if ((DR.Attr and faDirectory) = faAnyFile)
   and ((SR.Name  '.') and (SR.Name  '..'))

   then

        ListItem:=ListView1.Items.Add;
        ListItem.Caption:=(FullName);
        ListItem.SubItems.Add(IsDir(FullPath));
        ListItem.SubItems.Add(DateTimeToStr(FileDateToDateTime(Sr.Time)));
        ListItem.SubItems.Add(IntToStr(Dr.Size));

   FoundFile := FindNext(SR); // kontynuuj przeszukiwanie
  end;
  FindClose(SR);  // zakończ

end;
Found := FindNext(DR); // kontynuuj

end;
FindClose(DR);
end;

end;

* koniec

Co należy skorygować, aby pliki(foldery) zostały poprawnie przepisane do ListView z prowidłowym podaniem rozmiaru (w bajtach) i czasu?

Z góry dziekuję za wszelikie sugestie i modyfikacje powyższej procedury.

Pozdrawiam,
Piotr Murawski

0

Chlopie pokreciles to totalnie... wcale sie nie dziwie, ze nie dziala.
Ehhh... zle uzywasz FindFirst i FindNext. Podam przyklad uzycia chociaz takich rzykladow jest wszedzie pelno. Zaluzmy, ze chcesz wyszukac pliki i katalogi w danym katalogu:

var
SR: TSearchRec;
Found: integer;

begin

try

if (FindFirst(Katalog + '\.', faAnyFile, SR) = 0 then
begin
//... tutaj robisz sobie cos ze znaleziskiem

 repeat
 Found = FindNext(SR);
 if Found = 0 then
    begin
    //... tutaj robisz sobie cos ze znaleziskiem
    end;
 until Found  0;

 end;

finally FindClose(SR); end;

end;

if ((DR.Attr and faDirectory) = faAnyFile)

Nie wiem co to znaczy ale powinno byc raczej tak:
if (SR.Attr and faDirectory) then cos_tam...

No i poza tym cala procedura jest troszke zle skonstruowana, ale to moze ktos inny jeszcze cos na ten temat napisze.
[cya]

0

Ale żeś na kombinował :|
Poukładaj ten kod "tematycznie" bo panuje tu TotalChaos
Jak będziesz tak dalej pisał to przy poważniejszych projektach pogubisz się na samym początku. 8-0

P.S. Nie mart się kilka programów i nabierzesz wprawy. Ja osobiści zawsze dziele sobie program na bloki funkcyjne i dopiero potem piszę. To ułatwia sprawę wiesz co już masz a czego jeszcze nie.
Pozdrówka [cya]

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