AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Findfirst / Findnext liefert falsche Ergebnisse
Thema durchsuchen
Ansicht
Themen-Optionen

Findfirst / Findnext liefert falsche Ergebnisse

Ein Thema von Anthauri · begonnen am 21. Aug 2004 · letzter Beitrag vom 21. Aug 2004
Antwort Antwort
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#1

Findfirst / Findnext liefert falsche Ergebnisse

  Alt 21. Aug 2004, 13:21
Hallo Delphianer,

ich bin auf folgendes Phänomen gestoßen.


Ich habe eine simple Findfirst / Findnext-Funktion um Dateien zu finden und in einer Listbox anzuzeigen. Hierbei kann der Anwender in ein Editfeld die Daten für den Filter der Suchfunktion eingeben.


In dem aktuellen Verzeichnis sind z.B. zwei Dateien mit den Namen:

"R 12.txt" und "R12.txt", dann findet der Aufruf beide Dateien obwohl als Filter "R12*" vorgegeben wurde. Das Space in dem einen Namen wird ignoriert.

Dann gibt es eine andere Datei mit dem Namen "abc.fgt.ghz.gt.txt" die ebenfalls gefunden wird, wenn der Filterinhalt "abc*1*" ist obwohl das Zeichen "1" überhauptnicht vorkommt. Mit "abc*2*" geht's aber nicht.


Irgendwie komisch dachte ich mir und bemühte den Windows Dateiexplorer mit gleichen Suchkriterien... Siehe da, auch der fand die eigentlich falschen Einträge... scheint also vom Betriebssystem abzuhängen (taucht im übrigen unter Win 98 und Win XP auf).


Hat jemand eine Idee, wie sich das korrigeieren läßt????

Derzeit plane ich (für meine eigentliche Anwendung) die Findnext-Funtkion alles finden zu lassen und die Ergebnisse dann über eine eigene Routine weiterzugeben oder zu ignorieren (also ein selbsterstellter Filter)
Aber eigentlich kann es das ja nicht sein, oder?

-----------------------------------------
Hier das (für den Test minimierte) Coding


var
__findfirsttest_f: Tfindfirsttest_f;
__srec : tsearchrec;

implementation

{$R *.dfm}

procedure Tfindfirsttest_f.b_reloadClick(Sender: TObject);
begin
_lb_result.Items.Clear;
_if findfirst(e_filter.Text,0,srec)=0
___then
_____try
_______repeat
_________lb_result.Items.Append(srec.Name);
_______until findnext(srec)<>0;
_____finally
_______findclose(srec);
___end;
end;
-----------------------------------------

P.S. die Unterstriche zu Beginn der Zeilen sind im Coding natürlich eigentlich nicht enthalten.
Ggf kann mir jemand erklären wie denn führende Leerzeichen mit in die Vorschau übernommen werden. Meine Experimente schlugen fehl. Daher die Notlösung mit den Unterstrichen zu Beginn, die eigentlich Spaces sind.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Findfirst / Findnext liefert falsche Ergebnisse

  Alt 21. Aug 2004, 13:26
Zitat von Anthauri:
P.S. die Unterstriche zu Beginn der Zeilen sind im Coding natürlich eigentlich nicht enthalten.
Und genau deswegen haben wir die [ delphi]-Tags.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Snoop007

Registriert seit: 15. Jan 2003
331 Beiträge
 
Delphi 6 Personal
 
#3

Re: Findfirst / Findnext liefert falsche Ergebnisse

  Alt 21. Aug 2004, 13:31
FindFirst greift auf FindFirstFile aus der WinApi zurück daher die gleichen "Fehler"
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: Findfirst / Findnext liefert falsche Ergebnisse

  Alt 21. Aug 2004, 14:49
Zitat von Anthauri:
Dann gibt es eine andere Datei mit dem Namen "abc.fgt.ghz.gt.txt" die ebenfalls gefunden wird, wenn der Filterinhalt "abc*1*" ist obwohl das Zeichen "1" überhauptnicht vorkommt. Mit "abc*2*" geht's aber nicht.
Erinnert mich an die Geschichte mit den kurzen und langen Dateinamen. Unter 98 wird aus "abs.fgt.ghz.gt.txt" "absfgt~1.txt", weil 9x die langen Einträge quasi nur simuliert. Die Datei besitzt in der FAT eigentlich den 8.3-Namen (altes DOS-Relikt), aber zusätzlich gibt es noch einen Eintrag mit dem langen Namen.
  Mit Zitat antworten Zitat
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#5

Re: Findfirst / Findnext liefert falsche Ergebnisse

  Alt 21. Aug 2004, 15:27
Vielen Dank für die schnellen Antworten

Das mit den Tags kannte ich nicht, werde ich zukünftig aber nutzen.

Der Hinweis mit den alten DOS Namen ist tatsächlich die Lösung (auch unter XP).

Ich habe eine weitere Datei erstellt, die in den ersten Zeichen dem Namen der alten gleich ist
(abc.fgt.ghz.gz.txt) und diese wird gefunden, wenn als Filterwert "abc*2*" vorgegeben wird.
Die Suche bezieht sich also immer auf beide Namen (alt und neu).


Sachen gibt's....
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6

Re: Findfirst / Findnext liefert falsche Ergebnisse

  Alt 21. Aug 2004, 18:49
Na ja, dann nennen wir es nicht "Fehler" sondern "nostalgisches Problem"
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Findfirst / Findnext liefert falsche Ergebnisse

  Alt 21. Aug 2004, 20:02
Zitat von MathiasSimmack:
Na ja, dann nennen wir es nicht "Fehler" sondern "nostalgisches Problem"

Nun ja, man muß ja nicht aus jedem Bug gleich ein Feature machen, nur weil Microsoft das Problem nicht interessiert, obwóhl (behaupte ich einfach Intuitiv aus meiner Erfahrung) jeder andere renommierte Betriebsssystemhersteller das im Griff hat. Weiterhin ist dieses unerwartete Verhalten nicht in der Standardwindowshilfe beschrieben, und deshalb ist und bleibt es ein Bug.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:46 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