Delphi-PRAXiS
Seite 1 von 3  1 23   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi findFirst systemabhängig?? (https://www.delphipraxis.net/74541-findfirst-systemabhaengig.html)

hackyie 4. Aug 2006 20:25


findFirst systemabhängig??
 
hi,

hier mal meine findFirst-Methode, ich möchte ausschließlich Ordner suchen und die Ordner [.] und [..] ausschließen:

Delphi-Quellcode:
if FindFirst(apPath + 'discs\*.*', faDirectory, SearchRec) = 0 then
  begin
    repeat
      if pos('.',SearchRec.Name) = 0 then
        ListBox1.items.add(searchrec.Name);
    until FindNext(searchrec) <> 0;
    findclose(searchrec);
  end;
Das ganze funktioniert auf meinem Win XP prof. System hundertpro, alle Ordner landen in der Liste. Auf dem System meines Vaters (auch Win XP prof) findet er null Ordner obwohl er 100% im richtigen Verzeichnis sucht und dort auch die Ordner existieren. Sind auch nicht versteckt oder ähnliches, ich kann das komplette Verzeichnis von emienm Rechner auf seinen kopieren und dort läuft es nicht mehr. warum?

Und am Rande: gibt es ne Möglichkeit, findFirst nur nach Ordnern suchen zu lassen und die nicht so umständlich rauszufiltern wie ich das gemacht habe?

Danke schonmal :)

Martin K 4. Aug 2006 20:31

Re: findFirst systemabhängig??
 
Ein Ordner kann auch einen Punkt im Namen enthalten!

Mein Vorschlag:
Delphi-Quellcode:
  if FindFirst('*', faAnyFile, SR) = 0 then
  try
    repeat
      if (SR.Attr and faDirectory <> 0) and (SR.Name <> '.') and (SR.Name <> '..') then
        // SR.Name ist ein Ordner!
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
//Edit:
*.* durch * ersetzt.

hackyie 4. Aug 2006 20:34

Re: findFirst systemabhängig??
 
klasse, das läuft schonmal. Aber ich glaube nicht, dass das an der System-Inkompatibilität was ändert, mal testen nachher...

Neutral General 4. Aug 2006 20:38

Re: findFirst systemabhängig??
 
Du kannst nur Ordner suchen wenn du als Parameter bei FindFirst statt faAnyFile faDirectory angibst ;)

Gruß
Neutral General

Martin K 4. Aug 2006 20:44

Re: findFirst systemabhängig??
 
Zitat:

Zitat von Neutral General
Du kannst nur Ordner suchen wenn du als Parameter bei FindFirst statt faAnyFile faDirectory angibst ;)

Gruß
Neutral General

Hast Du es mal ausprobiert?
Bei mir ändert es nichts daran, ob ich nach faAnyFile oder nach faDirectory suche.
Beidemale wird nach Dateien und Ordnern gesucht.
Erst die Überprüfung SR.Attr and faDirectory<>0 sagt mir, ob es Datei oder Ordner ist.

Im Übrigen:
Nur nach Dateien suchen geht so:
faAnyFile-faDirectory bei FindFirst als Parameter.

Für die Suche nur nach Ordnern gibt es imho dort keine Parameter...

hackyie 4. Aug 2006 20:46

Re: findFirst systemabhängig??
 
korrekt. denn der Parameter gibt ja an, was zusätzlich zu anyFile gesucht werden soll. VOn daher glaube ich auch nicht, dass man schon direkt in FIndfirst alle Dateien ausschließen kann...

edit: heissa, es läuft auf beiden Systemen! so gravierend hab ich an sich gar nichts geändert, aber es läuft. Strange.

jbg 4. Aug 2006 21:19

Re: findFirst systemabhängig??
 
Zitat:

Zitat von Martin K
faAnyFile-faDirectory

+ und - sind nicht für Bit-Operationen gedacht, sondern zum addieren undd subtrahieren. Für Bit-Operationen sollte man or (Bit setzen) bzw. and not (Bit löschen) benutzen. Auch wenn es mehr schreibarbeit ist, es ist richtiger und führt nicht zu schwer auffindbaren Fehlern. Was wenn mal faDirectory nicht in faAnyFile enthalten ist, weil irgendein Schlauberger sich faAnyFile umdefiniert hat, damit es seinem Namen gerecht wird. Subtrahiert er nun faDirectory, so löscht er das Bit unterhalb von faDirectory, war er gar nicht wollte.

negaH 4. Aug 2006 22:29

Re: findFirst systemabhängig??
 
OT: Martins vorgeschlagener Source ist perfekt, danke !

Gruß Hagen

SirThornberry 4. Aug 2006 23:10

Re: findFirst systemabhängig??
 
Was mir auffällt: Du suchst nach "*.*". Streng genommen suchst du also nach Ordnern welche mindestens einen "." im Namen haben. Wenn du nach "*,*" suchst erwartest du ja auch das nur dinge gefunden werden wo "," drin vorkommt. Bei "." scheint das auf manchen Systemen eine Ausnahme zu sein. Aber Generell sollte man nur nach "*" suchen wenn man wirklich alle Namen finden will.

Martin K 5. Aug 2006 00:00

Re: findFirst systemabhängig??
 
Zitat:

Zitat von SirThornberry
Was mir auffällt: Du suchst nach "*.*". Streng genommen suchst du also nach Ordnern welche mindestens einen "." im Namen haben. Wenn du nach "*,*" suchst erwartest du ja auch das nur dinge gefunden werden wo "," drin vorkommt. Bei "." scheint das auf manchen Systemen eine Ausnahme zu sein. Aber Generell sollte man nur nach "*" suchen wenn man wirklich alle Namen finden will.

Stimmt.
Aber bei Windows ist wohl *.* = *
Ich verbessere es lieber mal im obigen Code, damit's keine Probleme gibt, wenn ihn jemand mal einfach so auf die Schnelle kopiert...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:50 Uhr.
Seite 1 von 3  1 23   

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