AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien Suchen nach Endung?

Ein Thema von Flom · begonnen am 9. Feb 2007 · letzter Beitrag vom 9. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
Flom

Registriert seit: 19. Sep 2006
126 Beiträge
 
#1

Dateien Suchen nach Endung?

  Alt 9. Feb 2007, 18:53
Hallo,
Ich möchte nach bestimmten Dateien Suchen für ein Programm aber das stürzt immer wieder ab nur wieso ?
Ich habe folgende Prozeduren...

Zur Suche:
Delphi-Quellcode:
procedure TForm1.SucheDir(ext:Str3; pfad:String);
var sr:TSearchRec;
    r:integer;
begin
  r:=FindFirst(pfad+'\*.*',faAnyFile,sr);
  while r=0 do
  begin
    if Copy(sr.name,1,1)<>'.then (*. und .. in Verzeichznissen ignorieren *)
    begin
      if (sr.attr<>0) and (faDirectory<>0) then (* Verzeichnis gefunden *)
        SucheDir(ext,pfad+'\'+sr.name)
      else (* Datei: ist die Erweiterung ok? dann anzeigen *)
        if System.Copy(sr.name, Pos('.',sr.name),4)='.'+ext then
          ListBox1.Items.Add(pfad+'\'+sr.name);
    end;
    Application.ProcessMessages;
    r:=FindNext(sr);
  end;
  FindClose(sr);
end;
Button 1:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Length(Edit1.Text) > 3 then
  begin
    ShowMessage('Bitte maximal 3 Zeichen für die Erweiterung eingeben!');
    exit;
  end;
  Button1.Enabled:=false;
  ListBox1.Clear;
  SucheDir(Edit1.Text,DriveComboBox1.Drive+':');
  Button1.Enabled:=true;
end;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dateien Suchen nach Endung?

  Alt 9. Feb 2007, 18:59
dazu sollte es jede menge Beispiele geben. Als tipp:
if Copy(sr.name,1,1)<>'.then Diese Anweisung filtert nicht nur "." und ".." sondern alles was mit einem "." beginnt.

und Anstelle von
System.Copy(sr.name, Pos('.',sr.name),4) kannst du auch
ExtractFileExt(sr.name) verwenden. Dann solltest du beachten das zum Beispiel ".txt" und ".TxT" nicht das gleiche ist.
Dein vergleich
if System.Copy(sr.name, Pos('.',sr.name),4)='.'+ext then schlägt also auch fehl wenn groß/klein-schreibung verschieden ist.

Zudem wäre es recht hilfreich wenn du uns den Fehler nennen würdest der ab und zu kommt und an welcher Stelle dieser kommt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Flom

Registriert seit: 19. Sep 2006
126 Beiträge
 
#3

Re: Dateien Suchen nach Endung?

  Alt 9. Feb 2007, 19:04
Sobald er sucht...
Er sucht 3 Sekunden und folgender Fehler kommt: Runtime error 202 at 0001:01BE.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Dateien Suchen nach Endung?

  Alt 9. Feb 2007, 19:09
mir fällt grad auf das dies hier auch unsinnig ist:
if (sr.attr<>0) and (faDirectory<>0) then faDirectory ist eine Konstante die immer ungleich 0 ist (somit ist der Teil hinfällig) und sr.attr ist ungleich 0 wenn die Datei versteckt, schreibgeschützt, Archiv, ein Verzeichnis oder ein Volume ist. Das ganze ist also recht unzuverlässig. Dementsprechend würdest du also wenn eine Datei Namens "hallo.txt" gefunden wird welche schreibgeschützt ist diese als Verzeichnis ansehen und dann nach "pfad\hallo.txt\*.*" suchen.
Wie bereits erwähnt gibt es genug funktionierende Beispiel über die Suchfunktion zu finden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Dateien Suchen nach Endung?

  Alt 9. Feb 2007, 19:10
Hier zunächst mal eine ganz saubere Prozedure um Dateien aufzulisten:
Delphi-Quellcode:
function BuildFileList(const Path: string; const Attr: Integer; const List: TStrings): Boolean;
var
  SearchRec: TSearchRec;
  R: Integer;
begin
  Assert(List <> nil);
  R := FindFirst(Path, Attr, SearchRec);
  Result := R = 0;
  List.BeginUpdate;
  try
    if Result then
    begin
      while R = 0 do
      begin
        if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
          List.Add(SearchRec.Name);
        R := FindNext(SearchRec);
      end;
      Result := R = ERROR_NO_MORE_FILES;
    end;
  finally
    SysUtils.FindClose(SearchRec);
    List.EndUpdate;
  end;
end;
Nimm diese Procedure und alles wird gut!
Delphi-Quellcode:
var
   pfad:string;
begin
  pfad := DriveComboBox1.Drive+':\*.*';
  pfad := changeFileExt(pfad, Edit1.Text);
  BuildFileList(pfad,faAnyFile, ListBox1.Items);
Siehst du auch den Unterschied zwischen SucheDir() und BuildFileList() ????
BuildFileList() ist universell einsetzbar; du kannst die Funktion nehmen und einfach
in ein anderes Delphi-Projekt übernehmen.
Andreas
  Mit Zitat antworten Zitat
Flom

Registriert seit: 19. Sep 2006
126 Beiträge
 
#6

Re: Dateien Suchen nach Endung?

  Alt 9. Feb 2007, 19:13
Zitat von SirThornberry:
Wie bereits erwähnt gibt es genug funktionierende Beispiel über die Suchfunktion zu finden.
Gibt es nicht Suche erfolglos beim suchen nach: Datei Suchen, Suche Datei

@shmia danke werds mal ausprobieren bei fragen meld ich mich
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Dateien Suchen nach Endung?

  Alt 9. Feb 2007, 19:16
Zitat von Flom:
Zitat von SirThornberry:
Wie bereits erwähnt gibt es genug funktionierende Beispiel über die Suchfunktion zu finden.
Gibt es nicht Suche erfolglos beim suchen nach: Datei Suchen, Suche Datei

@shmia danke werds mal ausprobieren bei fragen meld ich mich
ok, dann hast du nach dem falschen gesucht. Wenn man weiß das man mit FindFirst/FindNext dateien sucht kann man eben genau nach diesen Befehlen auch suchen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Dateien Suchen nach Endung?

  Alt 9. Feb 2007, 19:23
Moin Zusammen,

Zitat von SirThornberry:
dazu sollte es jede menge Beispiele geben. Als tipp:
if Copy(sr.name,1,1)<>'.then Diese Anweisung filtert nicht nur "." und ".." sondern alles was mit einem "." beginnt.
wobei man noch dazu anmerken sollte, dass Datei- und Verzeichnisnamen durchaus mit einem . beginnen dürfen.
Man kann es nur noch so im Explorer eingeben.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#9

Re: Dateien Suchen nach Endung?

  Alt 9. Feb 2007, 19:39
Hi,

ich habe mal schnell einen Code entwickelt der dir helfen sollte. Es sind zwar schon einige Beispiele genannt worden aber ich will dir meinen nicht vorenthalten:
Delphi-Quellcode:
procedure TForm1.CreateFileList(Dir, Ext: String; UseSubDirs: Boolean);
var
 SR: TSearchRec;

begin
 If FindFirst(Dir + '*.*', faAnyFile, SR) = 0 then
 Repeat
  If (SR.Attr and faDirectory = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') and (UseSubDirs) then CreateFileList(IncludeTrailingPathDelimiter(Dir + SR.Name), Ext, UseSubDirs)
  Else If LowerCase(ExtractFileExt(SR.Name)) = LowerCase(Ext) then
   begin
    Application.ProcessMessages;
    ListBox1.Items.Add(Dir + SR.Name);
   end;
 Until FindNext(SR) <> 0;
 FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ListBox1.Clear;
 CreateFileList(DriveComboBox1.Drive + ':\', Edit1.Text, CheckBox1.Checked);
end;
Wie gesagt, auf die schnelle, sollte aber fuktionieren.

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Dateien Suchen nach Endung?

  Alt 9. Feb 2007, 20:06
Eins verstehe ich nicht, warum nicht gleich z.b. FindFirst('c:\*.endung', ..) ?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz