AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Platzhalter in FindFirst/FindNext
Thema durchsuchen
Ansicht
Themen-Optionen

Platzhalter in FindFirst/FindNext

Ein Thema von p80286 · begonnen am 30. Nov 2016 · letzter Beitrag vom 1. Dez 2016
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

Platzhalter in FindFirst/FindNext

  Alt 30. Nov 2016, 12:42
Hallo zusammen,
ich suche (auf einem Serverlaufwerk) Dateien deren erster Buchstabe im Namen H ist also

Delphi-Quellcode:
mask:='H*';
sstring:=mypath;

  sstring:=sstring+mask;
  weiter:=sysutils.FindFirst(sstring, faAnyFile, SearchRec);
  if weiter=0 then begin
    if (searchrec.attr and fadirectory = 0) then
      dl.add(sfill+searchrec.name);
    while weiter=0 do begin
      weiter:=sysutils.FindNext(SearchRec);
      if (weiter=0) and (searchrec.attr and fadirectory = 0) then begin
        dl.add(sfill+searchrec.name);
      end;
    end;{while------------------}
  end;
  sysutils.FindClose(SearchRec);
Das funktioniert nur bedingt, da auch Dateinamen zurück gegeben werden mit '....H...' und nicht nur 'H.......'.
Gut das kann ich filtern mit if Dateiname[1]='Hthen .. aber wofür dann die Maske?
(das Programm läuft unter W7)

Mit 'H*.*' ist es das gleiche Ergebnis.



Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#2

AW: Platzhalter in FindFirst/FindNext

  Alt 30. Nov 2016, 13:26
Besteht das Problem nur auf dem Serverlaufwerk oder auch lokal. Ist das Serverlaufwerk gemappt?

Bei mir funktioniert diese Routine unter Win 7 lokal einwandfrei (ich habe mir erlaubt, das Ganze etwas zu verkürzen):
Delphi-Quellcode:
  S:='D:\TEMP\H*.*';
  if (FindFirst(S, faAnyFile, SearchRec) = 0) then
   begin
     repeat
       if (searchrec.attr and fadirectory = 0) then
        //dl.add(sfill+searchrec.name);
        SayStr(searchrec.name);
     until (FindNext(SearchRec) <> 0);
     FindClose(SearchRec);
   end;
(SayStr ist eine MessageBox)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#3

AW: Platzhalter in FindFirst/FindNext

  Alt 30. Nov 2016, 13:29
Zur eigentlichen Frage kann ich auch nichts aussagen.

FindClose muss nur aufgerufen werden (und nur dann!) wenn FindFirst erfolgreich war.
Andernfalls ist SearchRec nicht initialisiert und FindClose könnte Fehlern verursachen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: Platzhalter in FindFirst/FindNext

  Alt 30. Nov 2016, 14:32
Alternativ alles '*.*' suchen
und dann selber filtern.

TMask, MatchesMask (Masks.pas)
MaskUtils.pas

Falls das MatchesMask in D7 wo anders ist und nicht gefunden wird, dann eventuell mal bei TMaskEdit (Mask.pas) nachgucken.



oder Regex
oder MatchStr/MatchText/Pos
oder ...
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Platzhalter in FindFirst/FindNext

  Alt 30. Nov 2016, 18:46
@Himi das wir diese Verschlimmbesserungen in W ausbaden dürfen find ich gut!

@BLUB guter Hinweis! wird ich schnellstens verwursten!

@M Der lokale Test fehlt mir, da ich im Augenblick nicht dazu komme, da was vernünftiges aufzubauen, wäre aber zu berücksichtigen.
(der Beispielkode ist der Ausschnitt aus einem größeren Stück und Deine Verkürzung ist leider kontraproduktiv)

Vielen Dank an alle, mal schauen was sich daraus machen läßt.

@Himi der Übeltäter war D2006! noch etwas was ich prüfen müßte!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Platzhalter in FindFirst/FindNext

  Alt 30. Nov 2016, 19:48
Für den Fall, dass das Dateisystem NTFS sein sollte, so reicht faAnyFile nicht aus. Vom Filesystem komprimierte Dateien werden damit nicht gefunden.

Bei mir sieht das in 'ner entsprechenden Klasse so aus (Ausschnitt):
Delphi-Quellcode:
Var
  sr : TSearchRec;
  FileAttrs : Integer;
Begin
  FileAttrs := SysUtils.faReadOnly;
  FileAttrs := FileAttrs + SysUtils.faHidden;
  FileAttrs := FileAttrs + SysUtils.faSysFile;
  FileAttrs := FileAttrs + SysUtils.faDirectory;
  FileAttrs := FileAttrs + SysUtils.faArchive;
  FileAttrs := FileAttrs + SysUtils.faSymLink;
  FileAttrs := FileAttrs + 2048; // komprimierte Dateien unter NTFS

  // faReadOnly = $00000001 platform;
  // faHidden = $00000002 platform;
  // faSysFile = $00000004 platform;
  // faVolumeID = $00000008 platform;
  // faDirectory = $00000010;
  // faArchive = $00000020 platform;
  // Summe bis hierher entspricht:
  // faAnyFile = $0000003F;
  //
  // faSymLink = $00000040 platform;
(Zugegeben unter Delphi 7, weiß nicht, ob neuere Delphis die komprimierten Dateien unter NTFS inzwischen bei Nutzung von faAnyFile berücksichtigen.)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: Platzhalter in FindFirst/FindNext

  Alt 30. Nov 2016, 22:07
PS: BitMasken addiert man nicht.

OR
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#8

AW: Platzhalter in FindFirst/FindNext

  Alt 1. Dez 2016, 08:29
...
und Deine Verkürzung ist leider kontraproduktiv
...
Das klingt spannend. Warum ist denn eine Routine mit weniger Code, die exakt das gleiche Ergebnis liefert, wie eine Routine mit mehr Code kontraproduktiv?
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
540 Beiträge
 
#9

AW: Platzhalter in FindFirst/FindNext

  Alt 1. Dez 2016, 11:23
btw. Vorsicht mit FindFirst/FindNext.
Es kann sein das nur 512 Dateien zurückgegeben werden und danach FindNext keinen Treffer mehr findet.
Da bin ich mal bei verrückt geworden.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Platzhalter in FindFirst/FindNext

  Alt 1. Dez 2016, 12:11
Moin, Moin,

versuch mal den Code aus dem Anhang, er sollte das machen was du suchst/brauchst.
Angehängte Dateien
Dateityp: zip FileSearch.zip (3,2 KB, 33x aufgerufen)
  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 02:28 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