Find File at certain directory in Delphi

CK CK 3788 
Created at
Updated at  
436 0 0

This function we show below receives as parameters a file specification (like for example 'C: mp*.tmp' or 'C:*' if you want to search the entire hard disk.) and optionally a set of attributes (exactly as Delphi's FindFirst function), and it returs a StringList with the full pathnames of the found files. You should free the StringList after using it.

interface

uses SysUtils, Classes;

function FindFile(const filespec: TFileName; attributes: integer
   = faReadOnly Or faHidden Or faSysFile Or faArchive): TStringList;

implementation

function FindFile(const filespec: TFileName; attributes: integer): TStringList;
var
  spec: string;
  list: TStringList;

procedure RFindFile(const folder: TFileName);
var
  SearchRec: TSearchRec;
begin
  // Locate all matching files in the current
  // folder and add their names to the list
  if FindFirst(folder + spec, attributes, SearchRec) = 0 then begin
    try
      repeat
        if (SearchRec.Attr and faDirectory = 0) or
           (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
          list.Add(folder + SearchRec.Name);
      until FindNext(SearchRec) <> 0;
    except
      FindClose(SearchRec);
      raise;
    end;
    FindClose(SearchRec);
  end;
  // Now search the subfolders
  if FindFirst(folder + '*', attributes
      Or faDirectory, SearchRec) = 0 then
  begin
    try
      repeat
        if ((SearchRec.Attr and faDirectory) <> 0) and
           (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
          RFindFile(folder + SearchRec.Name + '');
      until FindNext(SearchRec) <> 0;
    except
      FindClose(SearchRec);
      raise;
    end;
    FindClose(SearchRec);
  end;
end; // procedure RFindFile inside of FindFile

begin // function FindFile
  list := TStringList.Create;
  try
    spec := ExtractFileName(filespec);
    RFindFile(ExtractFilePath(filespec));
    Result := list;
  except
    list.Free;
    raise;
  end;



Sample call

You can try this function placing a ListBox and a button on a form and adding this code to the OnClick event of the button:

procedure TForm1.Button1Click(Sender: TObject);
var
  list: TStringList;
begin
  list := FindFile('C:Delphi*.pas');
  ListBox1.Items.Assign(list);
  list.Free;
end;
Tags BMP to JPG W3C Date Time Format Facebook X
Comments 0
Similar posts
  1. How to get get IE favorites
    449
  2. Reading a directory content
    440
  1. Get the length of arrays and a string
    1,725
  2. Delphi Pointer Types
    21,757
  3. How to read/wrtie INI file in Delphi ?
    3,091
  4. How to get file created time, modified time, and last accessed time ?
    3,312
  5. Delphi string conversion functions - AnsiToUTF-8, UTF8Encode, ...
    643
  6. When subject is crashing in TIdSMTP VCL
    615
  7. How to send text/html based email in UTF-8 with TIdSMTP, TIdMessage VCL
    1,075
  8. How to encode subject content when sending mail with TIdMessage ?
    1,071
  9. Base64 Encoding/Decoding function for Delphi
    1,153
  10. How to send email by TIdSMTP VCL ?
    1,015
  11. How to return exit code such as exit() function in C/C++ ?
    661
  12. How to get parameter string ?
    1,234
  13. Save TBitmap image to Jpeg format image in Delphi
    710
  14. How to get screen resolution in case of using multiple monitors ?
    447
  15. How to turn off monitor ?
    425
  16. Sending email messages in .Net
    1,030
  17. Delphi for .Net Code Folding keyboard shortcuts
    525
  18. How to encrypt a string
    464
  19. Creating thumbnail images
    860
  20. Technology sharing related with software development. Specially content will be focused to programming language, and embedded systems.
    847
  21. How to speed up access to the RichTextBox Lines property
    828
  22. Window flashing
    378
  23. How to use TTF Font Without Installing
    1,113
  24. How to show window contents while dragging
    451
  25. How to save text from Clipboard to a file
    566
  26. How to send char as message to another application
    541
  27. How to restrict mouse movement
    407
  28. List Devices (LPT, COM ports, ...)
    477
  29. How to know whether the font is TrueTypeFont or not
    374
  30. How to track a user's idle time
    587
Recently updated
  1. Why 100% SEO Guarantees Better User Engagement and How to Achieve It in Your Service
    27
  2. Why SPF and DKIM Are Essential for Linux Email Servers?
    24
  3. How do I create animated background for Google Meet?
    19,711
  4. MaxMind GeoLite2 vs. DB-IP Lite vs. ip-api.com: Choosing the Right Free IP Geolocation Solution
    217
  5. Meet Valkey: Why Redis Changed Its License, Why Valkey is Better, and How to Use It as a Drop-in Replacement
    85
  6. How Rogue Web Scrapers Are Stealing My Content and Destroying My Server
    153
  7. Array of arguments passed to script in PHP
    85
  8. Invalid Auction Storms in Ad Tech
    93
  9. Building MRC-Compliant Instrumentation in Ad Tech: Implementation Steps and Key Challenges
    198
  10. The Two Clocks of Ad Server Architecture
    63
  11. Frequency Cap Architecture Overview
    509
  12. Collecting Proof-of-Play from 100,000 Screens
    141
  13. Vector Search in Relational Databases (RDBs): Trends & Usage Environments
    280
  14. What is RedisVL?
    105
  15. Designing a Skill Registry Architecture: Minimize Token Usage and Maximize AI Performance
    224
  16. TPU & GPU Cluster Management Tools
    232
  17. The Concept of Scaffolding in AI Agents
    221
  18. Beyond Static Pipelines: Architecting LLM Multi-Agent Systems for Autonomous Workflow Orchestration
    576
  19. AI-DLC vs. AI-SDLC: Model-Centric vs. System-Centric AI Development
    253
  20. Fine-Tuning Open-Weight LLMs: Training, Licensing, and Deploying Custom Models with Ollama
    327
  21. Inside the Next-Generation Streaming Architecture: Ultra-Low Latency, SGAI, and AI Codecs
    197
  22. Machine Learning: Training vs. Ranking
    213
  23. The Continuous Learning Machine: Designing a Loop That Actually Turns
    217
  24. The Next-Gen Low-Latency Standards: LL-HLS & MoQ
    189
  25. Designing a Data Curation System Around a Vector Database
    215
  26. Extracting Context from Live Video: The Architecture Got Simpler When We Stopped Building Features
    229
  27. The New Ad Stack Behind Live Sports Streaming: Inside SGAI, EABN, and the Standards Race to Fix Live Monetization
    649
  28. Designing MLOps Architectures to Handle Seasonal Data Drift in EV Fleet Models
    185
  29. From 15 to 40+ FPS: Accelerating PyTorch Object Detection on Automotive ECUs
    207
  30. Understanding Data Lineage
    252