tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
2351
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    89
    Hallo, habe mal wieder eine Frage:
    Ich möchte gern von einen bestimmten Ordner alle Dateien in einer ListBox auflisten.

    Wie ist das realisierbar?



    Vielen Dank schonmal!
     

  2. #2
    Supa Supa ist offline Mitglied Gold
    Registriert seit
    Jul 2004
    Ort
    Velbert
    Beiträge
    160
    Moin,

    also ich würd zunächst mal alle Dateinamen in dem Verzeichnis einlesen (meinetwegen in ner Liste zwischenspeichern, wenn du sie nachher noch brauchst) und dann schön der Reihe nach in die ListBox einfügen.

    mfg
     
    noch 'n bischen Werbung in eigener Sache: www.ice-only.de

  3. #3
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    89
    Das ist mir klar, nur WIE alle einlesen?
     

  4. #4
    Supa Supa ist offline Mitglied Gold
    Registriert seit
    Jul 2004
    Ort
    Velbert
    Beiträge
    160
    Ja, dann sag doch das du wissen möchtest, wie man Dateien einliest

    Also ich hab mal ne Funktion geschrieben, mit der man Verzeichnisse einlesen kann. Das ging ungefähr so:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    String root = "c:";
    WIN32_FIND_DATA flData;
     
    HANDLE hFind = FindFirstFile((root+"\\"+"*").c_str(), &flData);
    BOOL bOK = hFind != INVALID_HANDLE_VALUE;
     
    while (bOK){
      if(flData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
        if(flData.cFileName[0] != '.'){
          ListBox1->AddItem(flData.cFileName, 0);
        }
      }
      bOK = FindNextFile(hFind, &flData);
    }

    Wenn du das FILE_ATTRIBUTE_DIRECTORY änderst (dazu Google:"WIN32_FIND_DATA") müsste es eigentlich möglich sein, nur Dateien aus zu lesen.

    mfg
     
    noch 'n bischen Werbung in eigener Sache: www.ice-only.de

  5. #5
    Registriert seit
    Mar 2004
    Beiträge
    441
    Von http://www.swissdelphicenter.ch/de/showcode.php?id=1725:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    procedure ListFileDir(Path: string; FileList: TStrings);
    var
      SR: TSearchRec;
    begin
      if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
      begin
        repeat
          if (SR.Attr <> faDirectory) then
          begin
            FileList.Add(SR.Name);
          end;
        until FindNext(SR) <> 0;
        FindClose(SR);
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ListFileDir('C:\WINDOWS\', ListBox1.Items);
    end;

    Der CBuilder und Delphi basieren beide auf der VCL, von daher ist der Code problemlos nach C++ VCL portierbar, da alle Objekte (z.B. TSearchRec) auch in C++ verwendbar sind.

    Das Ergebnis sieht dann so aus:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    void __fastcall TForm1::ListFileDir(String Path, TStrings* FileList)
    {
        TSearchRec SR;
     
        if (FindFirst(Path + "*.*", faAnyFile, SR) == 0)
        {
            do
            {
                if(SR.Attr != faDirectory)
                {
                    FileList->Add(SR.Name);
                            }
            }
            while(FindNext(SR) == 0);
        }
    }
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        ListFileDir("C:\\WINDOWS\\", ListBox1->Items);  
    }

    Zu Delphi gibt es eine Vielzahl von Tips, Tricks und Tutorials, die sich in fast allen Fällen auch auf C++ VCL übertragen lassen, von daher kann ich dir das SwissDelphiCenter sehr ans Herz legen.
     

  6. #6
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    89
    Wo ist denn ListFileDir?
    Finde es einfach nicht...

    Gibt es das nicht in meiner Version (6)?
    Was kann ich sonst dazu nehmen?
     

  7. #7
    Supa Supa ist offline Mitglied Gold
    Registriert seit
    Jul 2004
    Ort
    Velbert
    Beiträge
    160
    ListFileDir ist eine Funktion, die Du dir selbst schreibst.

    Das hier ist quasi deren Inhalt
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    String Path = "c:\\windows"; 
    TStrings* FileList = new FileList();
     
    TSearchRec SR;
     
        if (FindFirst(Path + "*.*", faAnyFile, SR) == 0)
        {
            do
            {
                if(SR.Attr != faDirectory)
                {
                    FileList->Add(SR.Name);
                            }
            }
            while(FindNext(SR) == 0);
        }
    Die FileList kannst du nachher einfach in die ListBox adden, wenn mich nicht alles täuscht. Theoretisch brauchst du dafür auch keine Funktion zu schreiben. Aber das würde sich natürlich anbieten, wenn du die Funktion öfter benutzen willst.

    mfg
     
    noch 'n bischen Werbung in eigener Sache: www.ice-only.de

  8. #8
    Registriert seit
    Mar 2004
    Beiträge
    441
    @Supa:
    Hrgn... da zuckt gleich mein Augenlid, wenn ich ein new ohne entsprechendes delete sehe...

    @-H-T-P-:
    Supa hat recht. In deinen Header mußt du natürlich noch die entsprechenden Funktionsprototypen mit aufnehmen.
     

  9. #9
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    89
    Ich weiß, stell mich ziemlich blöd .
    Trotzdem, wenn ich den Code oben (von Supa) unverändert einfüge kommt bei mir folgendes:

    Bei: TStrings* FileList = new FileList();
    Error: [C++ Error] Unit1.cpp(14): E2303 Type name expected
    [C++ Error] Unit1.cpp(14): E2034 Cannot convert 'int *' to 'TStrings *'
    [C++ Error] Unit1.cpp(14): E2141 Declaration syntax error


    Bei: if (FindFirst(Path + "*.*", faAnyFile, SR) == 0)
    Error: [C++ Error] Unit1.cpp(18): E2040 Declaration terminated incorrectly
     

  10. #10
    Supa Supa ist offline Mitglied Gold
    Registriert seit
    Jul 2004
    Ort
    Velbert
    Beiträge
    160
    Also erstmal hab ich bestimmt schon 2 Jahre nicht mehr mit dem BCB programmiert. Und mittlerweile auch nicht mehr in C/C++. Darum vergebt mir meine grobe Fahrlässigkeit

    Und Sorry, TStrings * FileList mit new FileList() zu initialisieren is natürlich auch totaler Bullshit. FileList ist natürlich nur der Variablenname. Da waren die Finger wieder schneller als der Kopf -.-

    Okay, hier noch mal eine komplette Funktion, die euer beider Zufriedenheit sicherstellen sollte:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    String Path = "c:\\windows\\";
    TStringList* FileList = new TStringList();
    TSearchRec SR;
     
        if (FindFirst(Path + "*.*", faAnyFile, SR) == 0)
        {
            do
            {
                if(SR.Attr != faDirectory)
                {
                    FileList->Add(SR.Name);
                }
            }
            while(FindNext(SR) == 0);
        }
        ListBox1->Items->AddStrings(FileList);
        delete FileList;

    Implementiert und getestet.

    mfg
     
    noch 'n bischen Werbung in eigener Sache: www.ice-only.de

  11. #11
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    89
    Danke. Werde es mal gleich testen.

    Edit:
    Super! Funktioniert einwandfrei!
    Geändert von -H-T-P- (20.11.08 um 18:09 Uhr)
     

Ähnliche Themen

  1. Dateien auflisten
    Von bernimoses im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 11.09.08, 19:26
  2. Ordner und Dateien auflisten
    Von marcap im Forum Java
    Antworten: 3
    Letzter Beitrag: 24.12.07, 13:24
  3. Auflisten von Dateien
    Von RealHAZZARD im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 5
    Letzter Beitrag: 11.10.05, 09:53
  4. URL/URI - Dateien auflisten?
    Von moson im Forum .NET Archiv
    Antworten: 0
    Letzter Beitrag: 08.12.04, 17:27
  5. Dateien in Liste auflisten
    Von daredevil im Forum Visual Basic 6.0
    Antworten: 5
    Letzter Beitrag: 08.08.03, 20:28