Announcement

Collapse
No announcement yet.

Dateinamen aus einem Ordner in eine StringList aufnehmen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dateinamen aus einem Ordner in eine StringList aufnehmen

    Hi all<br>
    Ich muss die Dateinamen eines Ordners in eine StringList schreiben.<br>
    Moechte aber nicht mit ListBox arbeiten.<br>
    Es muss doch moeglich sein, den Pfad anzugeben und die Dateinamen<br> auszulesen. Es handelt sich um mehrere *.exe-Dateien.<br>
    Ich habe es mit ExtractFileName probiert. Funktioniert nicht.<br>
    Ich arbeite mit Delphi5.<br>
    Danke im voraus.

  • #2
    Hallo,<p>
    um Dateien in einem Verzeichnis zu suchen, benutzt man <b>FindFirst</b> und <b>FindNext</b>. Dazu lassen sich im Forum einige Beispiele finden.<p>
    Nun zum zweiten Problem:
    <pre>
    var
    ExeStrings: TStrings;
    <p>
    //Neue StringListe anlegen
    begin
    ExeStrings := TStringList.Create;
    end;
    <p>
    //Die mit FindFirst und FindNext ermittelten Dateien
    //der Liste hinzufügen
    begin
    ...
    ExeStrings.Items.Add(...);
    end;
    <p>
    //Speicher wieder freigeben
    begin
    ExeStrings.Free;
    end;
    </pre>
    Weiter Informationen lassen sich in der Delphi-Hilfe unter <b>TStrings</b> finden

    Comment


    • #3
      Danke Elmar<p>

      Hatte zwar einige Schwierigkeiten mit den Datentypen, aber<BR> ansonsten war's recht einfach.<BR>
      Danke fuer die prompte Antwort

      Comment


      • #4
        An alle Suchenden<P>
        Hier ist ein kleines Beispiel:<P>
        <PRE>procedure TForm1.Button1Click(Sender: TObject);

        var
        strlist : TStringList;
        search : TSearchRec;
        path : string;
        help : string;
        i : integer;

        begin
        path:='j:\Delphi projects\project1\files\*.exe'; //*.* funktioniert nicht!???
        strlist:=TStringList.Create;
        if FindFirst(path,faAnyFile,search)=0 then
        begin
        strlist.Add(search.Name);
        while FindNext(search)=0 do
        strlist.Add(search.Name);
        end
        else
        begin
        ShowMessage('keine exe-Dateien gefunden'); //error
        strlist.Add('pillepalle');
        end;

        for i:=0 to strlist.Count-1 do
        help:=help+strlist[i]+' ';

        if strlist[0]='pillepalle' then
        exit
        else
        ShowMessage(help); //testausgabe

        FindClose(search); //speicher "search" freigeben
        strlist.Free; //speicher "strlist" freigeben
        end;

        end.

        {faReadOnly
        faHidden
        faSysFile
        faVolumeID
        faDirectory
        faArchive
        faAnyFile}</PRE&gt

        Comment


        • #5
          Falls aber doch mal 'pillepalle' in deiner Stringliste steht, wird deine Stringliste nicht mehr freigegeben. Das mit dem 'pillepalle' kannst du getrost weglassen, eben weil es 'pillepalle' ist. Da in deiner StringList nichts anderes als dieser eine String steht, kannst du ihm auch die Nachricht mitgeben: 'Keine Dateien gefunden.', läßt es anzeigen und anschließend freigeben.
          <pre>
          procedure TForm1.Button1Click(Sender: TObject); var
          strlist : TStringList;
          search : TSearchRec;
          path : string;
          help : string;
          i : integer; begin
          path:='c:\*.*'; //*.* funktioniert doch!???
          strlist:=TStringList.Create;
          {Wenn ich keine Verzeichnisse sehen will dann -faDirectory.}
          if FindFirst(path,faAnyFile-faDirectory,search)=0 then begin
          strlist.Add(search.Name);
          while FindNext(search)=0 do strlist.Add(search.Name);
          end else begin
          strlist.Add('Keine Dateien gefunden');
          end;
          for i:=0 to strlist.Count-1 do help:=help+strlist[i]+' ';
          ShowMessage(help);
          strlist.Free
          end;
          end.
          </pre>

          mfg Klaus-Pete

          Comment


          • #6
            Danke Klaus-Peter<p>
            Kleiner Denkfehler von mir.<br>
            Hab auch noch nicht gewusst das man nicht erwuenschte Attribute mit Minus ausblenden kann.<br>
            Aber wo's ein Plus gibt, gibt's auch ein Minus. Siehe Kontostand! <br>
            Danke fuer den Hinweis.<p>
            Servus Ro

            Comment


            • #7
              Hallo Zusammen,<br>
              <br>
              eine kleine Ergänzung noch:<br>
              <br>
              <pre>
              try
              strlist:=TStringList.Create;
              if FindFirst(path,faAnyFile-faDirectory,search)=0 then
              begin
              ...
              end;
              ...
              finally
              FindClose(search);
              FreeAndNil(strlist);
              end;
              </pre>
              <br>
              Begründung:<br>
              try/finally ist der sogenannte Resourcenschutzblock. Wenn Resourcen belegt werden (FindFirst, TStringList.Create)<br>
              sollte sichergestellt werden dass diese auch wieder freigegeben werden, wenn sie nicht mehr benötigt werden.<br>
              FindFirst ruft intern die API Funktion FindFirstFile auf, und belegt dabei ein Handle (Resource).<br>
              Um dieses freizugeben wird dann FindClose aufgerufen.<br>
              Ähnliches gilt dann auch für TStringList. FreeAndNil ist nur eine kürzere Schreibweise für strlist.Free; strlist := nil;<br>
              (nicht in jeder Delhpi Version vorhanden)<br>
              Letzteres ist zwar nicht zwingend notwendig, aber strlist würde sonst auf einen Speicherbereich verweisen, der nicht mehr für das Object gültig ist.<br>
              strlist := nil; dient also nur dazu einen definierten Zustand zu schaffen, der es einem ermöglicht, vor dem Zugriff<br>
              zu ermitteln, ob auf ein gültiges Object verwiesen wird (if strlist <> nil then...)<br>
              <br>
              Ciao<br>
              Chri

              Comment

              Working...
              X