![]() |
Platzhalter in FindFirst/FindNext
Hallo zusammen,
ich suche (auf einem Serverlaufwerk) Dateien deren erster Buchstabe im Namen H ist also
Delphi-Quellcode:
Das funktioniert nur bedingt, da auch Dateinamen zurück gegeben werden mit '....H...' und nicht nur 'H.......'.
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); Gut das kann ich filtern mit
Delphi-Quellcode:
aber wofür dann die Maske?
if Dateiname[1]='H' then ..
(das Programm läuft unter W7) Mit 'H*.*' ist es das gleiche Ergebnis. Gruß K-H |
AW: Platzhalter in FindFirst/FindNext
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:
(SayStr ist eine MessageBox)
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; |
AW: Platzhalter in FindFirst/FindNext
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. |
AW: Platzhalter in FindFirst/FindNext
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 ... |
AW: Platzhalter in FindFirst/FindNext
@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 |
AW: Platzhalter in FindFirst/FindNext
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:
(Zugegeben unter Delphi 7, weiß nicht, ob neuere Delphis die komprimierten Dateien unter NTFS inzwischen bei Nutzung von faAnyFile berücksichtigen.)
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; |
AW: Platzhalter in FindFirst/FindNext
PS: BitMasken addiert man nicht.
OR |
AW: Platzhalter in FindFirst/FindNext
Zitat:
|
AW: Platzhalter in FindFirst/FindNext
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. |
AW: Platzhalter in FindFirst/FindNext
Liste der Anhänge anzeigen (Anzahl: 1)
Moin, Moin,
versuch mal den Code aus dem Anhang, er sollte das machen was du suchst/brauchst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz