AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

findFirst systemabhängig??

Ein Thema von hackyie · begonnen am 4. Aug 2006 · letzter Beitrag vom 5. Aug 2006
Antwort Antwort
Seite 1 von 3  1 23   
hackyie

Registriert seit: 3. Nov 2003
50 Beiträge
 
#1

findFirst systemabhängig??

  Alt 4. Aug 2006, 20:25
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
Thread(this).Post(this).terminate;
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: findFirst systemabhängig??

  Alt 4. Aug 2006, 20:31
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.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
hackyie

Registriert seit: 3. Nov 2003
50 Beiträge
 
#3

Re: findFirst systemabhängig??

  Alt 4. Aug 2006, 20:34
klasse, das läuft schonmal. Aber ich glaube nicht, dass das an der System-Inkompatibilität was ändert, mal testen nachher...
Thread(this).Post(this).terminate;
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.071 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: findFirst systemabhängig??

  Alt 4. Aug 2006, 20:38
Du kannst nur Ordner suchen wenn du als Parameter bei FindFirst statt faAnyFile faDirectory angibst

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: findFirst systemabhängig??

  Alt 4. Aug 2006, 20:44
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...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
hackyie

Registriert seit: 3. Nov 2003
50 Beiträge
 
#6

Re: findFirst systemabhängig??

  Alt 4. Aug 2006, 20:46
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.
Thread(this).Post(this).terminate;
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.459 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: findFirst systemabhängig??

  Alt 4. Aug 2006, 21:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: findFirst systemabhängig??

  Alt 4. Aug 2006, 22:29
OT: Martins vorgeschlagener Source ist perfekt, danke !

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: findFirst systemabhängig??

  Alt 4. Aug 2006, 23:10
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: findFirst systemabhängig??

  Alt 5. Aug 2006, 00:00
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...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf