ich versuche gerade nach sehr, sehr langer Zeit wieder ein wenig zu programmieren und habe mich für Lazarus/FPC entschieden.
Ich habe Ende der 80er, Anfang der 90er mit IT und Programmierung angefangen, habe mich aber später (so ab 1998/2000) weniger um die Programmierung und mehr um Administration und Installation von Windows und Linux Systeme gekümmert. Bin also auf beiden Plattformen zu Hause.
So, aber zu meinem Problem. Ich habe mir Beispiel-Code aus dem Netz geholt und dies soweit an mein kleines, persönliches Projekt-Tool angepasst. Aber irgend wo ist ein Haken und ich finde den Fehler nicht. Vielleicht kann mich also jemand auf den richtigen Weg führen.
Hier mal der Code, der wohl irgend wo ein Problem hat.
Code: Alles auswählen
PROCEDURE TFormMain.ButtonStartSeachClick ( Sender : TObject ) ;
BEGIN
SearchDirectory( DirectoryEdit.Text );
end;
PROCEDURE TFormMain.SearchDirectory ( SearchDir : STRING );
VAR
Info : TSearchRec;
Count : LONGINT;
ListViewItem : TListItem;
FileTime : TDateTime;
SearchMask : STRING;
BEGIN
ListView.Items.Clear;
ListView.Items.BeginUpdate;
Count := 0;
SearchDir := IncludeTrailingPathDelimiter( SearchDir );
CurrentDirectory := SearchDir;
SearchMask := EditSearchMask.Text;
IF ( Length(SearchMask) <= 0 ) THEN SearchMask := FileMask;
// if we have found a file...
IF FindFirstUTF8( SearchDir + SearchMask, faAnyFile AND faDirectory, Info ) = 0 THEN
BEGIN
REPEAT
Inc( Count );
// we do stuff with the file entry we found
// TODO: system file icon image list ...
IF ( Name <> '.' ) AND ( Name <> '..' ) THEN
BEGIN
ListViewItem := ListView.Items.Add;
ListViewItem.Caption := Info.Name;
// If we find a folder
IF ( Info.Attr AND faDirectory ) <> 0 THEN
BEGIN
// ListViewItem.ImageIndex := 1;
ListViewItem.SubItems.Add( '--' ); // folders can't show size
END
ELSE // if we find a file
BEGIN
// ListViewItem.ImageIndex := 2;
ListViewItem.SubItems.Add( FileSizeFormat( Info.Size ) );
END;
FileTime := FileDateToDateTime( Info.Time );
ListViewItem.SubItems.Add( FormatDateTime( 'dd/mm/yyyy hh:nn:ss', FileTime ) );
END;
UNTIL FindNextUTF8( Info ) <> 0;
END;
// we are done with file list
ListView.Items.EndUpdate;
FindCloseUTF8( Info );
Caption := 'Wiolant : ' + IntToStr( Count );
END;
FUNCTION TFormMain.FileSizeFormat ( nBytes : DOUBLE ) : STRING;
BEGIN
IF nBytes < KiB THEN
Result := floattostr( nBytes ) + ' B'
ELSE IF ( nBytes >= KiB ) AND ( nBytes < MiB ) THEN
Result := FormatFloat( '0.00', nBytes / KiB ) + 'KiB'
ELSE IF ( nBytes >= MiB ) AND ( nBytes < GiB ) THEN
Result := FormatFloat( '0.00', nBytes / MiB ) + 'MiB'
ELSE IF ( nBytes >= GiB ) AND ( nBytes < TiB ) THEN
Result := FormatFloat( '0.00', nBytes / GiB ) + 'GiB'
ELSE
Result := FormatFloat( '0.00', nBytes / TiB ) + 'TiB';
END;
Das Ergebnis sieht dann wie im Bild aus, also irgend wo stimmt was nicht.
Und hier noch, wie ich es erstellt habe.
Bin für jeden Tipp dankbar!
Gruß
Robert