Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   FileExists mit Wildecard-Support (https://www.delphipraxis.net/211126-fileexists-mit-wildecard-support.html)

Bernhard Geyer 31. Jul 2022 17:06

FileExists mit Wildecard-Support
 
"Früher" (Delphi 6) hat FileExists Wildcard unterstützt.
Man konnte also suche ob eine Datei ein Pattern unterstützt.
Mittlerweile macht es FileExists nicht mehr.

Was wäre der (schnellste) Ersatz dafür, denn es schon in Delphi gibt?

dummzeuch 31. Jul 2022 17:23

AW: FileExists mit Wildecard-Support
 
TFilesystem.FindMatchingFile aus meiner dzLib:

https://osdn.net/projects/dzlib-tool...zFileUtils.pas

Delphi-Quellcode:
class function TFileSystem.FindMatchingFile(const _Mask: string; out _Filename: string): TMatchingFileResult;
var
  Sr: TSearchRec;
begin
  Result := mfNotFound;
  if 0 = FindFirst(_Mask, faAnyFile, Sr) then
    try
      repeat
        if (Sr.Name <> '.') and (Sr.Name <> '..') then begin
          _Filename := Sr.Name;
          if (Sr.Attr and SysUtils.faDirectory) <> 0 then
            Result := mfDirectory
          else
            Result := mfFile;
          Exit;
        end;
      until 0 <> FindNext(Sr);
    finally
      FindClose(Sr);
    end;
end;

himitsu 31. Jul 2022 18:04

AW: FileExists mit Wildecard-Support
 
Delphi-Quellcode:
if TDirectory.GetFiles('C:\Irgendwo', 'abc*.xyz') <> nil then


zumindestens einfach, falls schnell genug.

Ansonsten ist das wohl am Schnellsten:

Delphi-Quellcode:
var Dummy: TWIN32FindData;

if Winapi.Windows.FindClose(FindFirstFile('C:\*.ini', Dummy)) then
  Beep;


FileExists hat früher nur FindFirstFile gemacht (oder vielleicht auch damals schon mit CreateFile, aber zumindestens mit anderer Bedingung für den Fallback).
Jetzt macht es ein CreateFile ... falls das nicht ging (durch Sharing blockiert), wird zwar immernoch alternativ FindFirstFile gemacht, aber nicht bei einem "ungültigen" Namen, was es mit Wildcard nunmal ist.

PS: TFile.Exists macht intern auch nur FileExists, also diesbezüglich keine Änderung.

Bernhard Geyer 1. Aug 2022 06:58

AW: FileExists mit Wildecard-Support
 
danke erstmal.

Gerade gefunden das ich schon eine entsprechende Helper-Funktion implementiert hatte.
Scheinbar bei der Suche falschen Suchbegriff genutzt :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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