AGB  ·  Datenschutz  ·  Impressum  







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

findFirst systemabhängig??

Ein Thema von hackyie · begonnen am 4. Aug 2006 · letzter Beitrag vom 5. Aug 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von negaH
negaH

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

Re: findFirst systemabhängig??

  Alt 4. Aug 2006, 23:48
*.* ist absolut richtig gewesen. Ein * für den Dateinamen, ein Komma . zur Trennung zur Extension, und ein * für die Extenstion/Erweiterung einer Datei.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

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

Re: findFirst systemabhängig??

  Alt 5. Aug 2006, 12:24
Zitat von negaH:
*.* ist absolut richtig gewesen. Ein * für den Dateinamen, ein Komma . zur Trennung zur Extension, und ein * für die Extenstion/Erweiterung einer Datei.

Gruß Hagen
Ja, aber hier geht es doch um Ordner , nicht um Dateinamen.
Theoretisch dürfte er dann nur nach Ordnern suchen, die einen . Punkt im Namen enthalten.
Aber praktisch erhält man so trotzdem alle Ordner...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: findFirst systemabhängig??

  Alt 5. Aug 2006, 12:35
Die Trennung eines Dateinamens, egal ob Datei oder Ordner, ist immer Name.Extension

Ich sagte ja schon das dein ehemaliger Source absolut sauber und perfekt ist, dh. eine Suchschleife für FindFirst(), FindNext() und FindClose() sollte exakt so aufgebaut sein wie dein Source.

1.) FindClose() in try finally
2.) FindClose() nur dann wenn FindFirst() was findet -> wichtig! für ältere Delphi RTLs
3.) die Abfrage auf Directory zuerst Attr per and auswerten, danach SR.Name <> '.' und danach erst SR.Name <> '..' das erzeugt den effizientesten Code, diese Reihenfolge der Auswertung ist also entscheidend und so wie du das gemacht hast ist es am effizientesten.

Sehr oft sieht man Auswertungen wie SR.Name[1] <> '.' oder Pos('.', SR.Name) > 0, diese sind jedoch defakto falsch. Odner könnten auch ".Name" oder "Name.Name" benannt sein. Oder man sieht sowas wie SR.Attr <> faDirectory was ebenfalls falsch ist. Denn damit würde man Directories mit Attr = faDirectory or faHidden, also versteckte Ordner eben nicht ausfiltern. Auch sehr oft zu sehen SR.Attr < 0, das geht weil faDirectory glaube ich das Signbit darstellt, ist aber denoch falsch da diese Auswertung vom Datentyp SR.Attr abhängig ist. Sollte dies ein Word/Cardinal sein so wäre SR.Attr < 0 ebenfalls absolut falsch. Wie gesagt, so wie du das gemacht hast ist es die beste Lösung.


Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

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

Re: findFirst systemabhängig??

  Alt 5. Aug 2006, 12:56
Also erstmal Danke für Deine Komplimente, aber ich habe den Code mir irgendwann auch mal aus versch. Beiträgen hier im Forum zusammengebastelt.

Zitat von negaH:
Die Trennung eines Dateinamens, egal ob Datei oder Ordner, ist immer Name.Extension
Das kann ich nicht so stehen lassen, da ein Ordner keine Extension hat.
Es gibt sogar Dateien, die keine haben
also kein . im Dateinamen / Ordnernamen!
Wieso deshalb nach einem . suchen?
Aber dazu hat ja SirThornberry schon was geschrieben...

Zitat von negaH:
Sehr oft sieht man Auswertungen wie SR.Name[1] <> '.' oder Pos('.', SR.Name) > 0, diese sind jedoch defakto falsch. Odner könnten auch ".Name" oder "Name.Name" benannt sein.
Genau wie hier (erster Beitrag):
Zitat von hackyie:
if pos('.',SearchRec.Name) = 0 then
Deshalt schrieb ich ja auch:
Zitat von Martin K:
Ein Ordner kann auch einen Punkt im Namen enthalten!
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: findFirst systemabhängig??

  Alt 5. Aug 2006, 13:02
Zitat von Martin K:
Das kann ich nicht so stehen lassen, da ein Ordner keine Extension hat.
Oh, da merkt man wie alt man ist Windows unterstütz auch heute noch das 8.3 Namesprinzip, FindFirst & Co. auch und im 8.3 System hatte jede Datei und jeder Ordner 8 Zeichen für den Namen und 3 für die Erweiterung. Fakt ist jedoch, dass gerade bei Ordner meistens auf eine Angabe für die Erweiterung verzichtet wurde.

Wenn eine Datei bzw. ein Ordner nicht alle 8 bzw. 3 Zeichen genutzt hatte, so hat das OS die betreffenden Stellen in der FAT mit #32 aufgefüllt und "unterstützte" somit auch Datei-/Ordnernamen mit weniger als 8 Zeichen vorn bzw. 3 hinten.
Zitat von Martin K:
Es gibt sogar Dateien, die keine haben
So gibt es auch Ordner die eine Erweiterung haben
Zitat von Martin K:
also kein . im Dateinamen / Ordnernamen!
Die Suche von FindNext findet auch Dateien/Ordner ohne Erweiterung, wenn man nach *.* sucht, da dieses die feste Maske für alles ist. Egal ob mit oder ohne Erweiterung.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

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

Re: findFirst systemabhängig??

  Alt 5. Aug 2006, 13:11
Zitat von sakura:
Die Suche von FindNext findet auch Dateien/Ordner ohne Erweiterung, wenn man nach *.* sucht, da dieses die feste Maske für alles ist. Egal ob mit oder ohne Erweiterung.
Trotzdem ist es irgnedwie logischer, nur nach * zu suchen, v.a. wenn es sich um Ordner handelt.
...außerdem ist es weniger Schreibarbeit und die pas wird 2 Byte kleiner

Mir ist allerdings nicht klar, was Ordner für Extensions haben könnten...
Hab grad in meinem Windows-Verzeichnis einen Ordner gefunden, der Microsoft.NET heißt.
Aber ist deswegen jetzt die Extension .NET ???
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#17

Re: findFirst systemabhängig??

  Alt 5. Aug 2006, 13:13
es gibt doch das märchen, dass ordner die endung ".dir" hätten...
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: findFirst systemabhängig??

  Alt 5. Aug 2006, 13:16
Zitat von fwsp:
es gibt doch das märchen, dass ordner die endung ".dir" hätten...
Es ist halt ein Märchen

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#19

Re: findFirst systemabhängig??

  Alt 5. Aug 2006, 13:18
Zitat von Martin K:
Mir ist allerdings nicht klar, was Ordner für Extensions haben könnten...
Hab grad in meinem Windows-Verzeichnis einen Ordner gefunden, der Microsoft.NET heißt.
Aber ist deswegen jetzt die Extension .NET ???
Wie auch bei Dateien, wird nach der 8.3 Konvention wie folgend für die Extension vorgegangen: die ersten drei legalen Zeichen nach dem letzten Punkt werden zur Extension. Also wird aus dem Ordner Microsoft.NET sehr wahrscheinlich MICROS~1.NET, wobei "~1" auch andere Werte annehmen kann, um Namenskollisionen zu vermeiden.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: findFirst systemabhängig??

  Alt 5. Aug 2006, 15:17
Zitat:
Zitat:
negaH hat folgendes geschrieben:
Die Trennung eines Dateinamens, egal ob Datei oder Ordner, ist immer Name.Extension
Das kann ich nicht so stehen lassen, da ein Ordner keine Extension hat.
Du musst es so stehen lassen, weil es richtig ist. Ein Ordner kann eine Extension besitzen, punkt.

Öffne die Eingabeaufforderung->DOS Box und geben ein "md Test.XYZ" und schaue dir im Explorer den erzeugten Ornder an. Nun suchst du mit deinem Source -> FindFirst('*.XYZ', faDirectory, SR) und wirst diesen Ordner auch finden.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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:39 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