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