Examples Delphi

{-------------------------------------------------------------------------}
{ }
{ Delphi Object Pascal Unit. }
{ }
{ File handling routines for windows, compiled from "WINFILE.TPW" and }
{ other pascal libraries. }
{ }
{ Includes the following classes : }
{ }
{ TDiskFileScaner : Used to scan disks for files. }
{ TFileDropControl : Placed on a control or form to make it accept }
{ files from "File Manager" }
{ }
{ Most functions moved from "FILE_IO" to add to DLL, some functions are }
{ still being updated. }
{ }
{ Some parts Copyright Boralnd International. }
{ Copyright © UK. Dave Rowlands 1993 - 1995. }
{ All Rights Reserved. }
{ }
{-------------------------------------------------------------------------}
Unit FileFind;
Interface
Uses
WinDOS, Classes, SysUtils;
Function GetFileList(Const FileSpec : String; List : TStrings) : LongInt;
{--- GetFileList(FileSpec, List) -----------------------------------------}
{ }
{ This funtion fills the "List" with files that match "FileSpec". If the }
{ "FileSpec" contains a directory then that directoy is searched, }
{ otherwise the current directory is searched. Returns the number of }
{ files found }
{-------------------------------------------------------------------------}
Function HasAttr(Const FileName : String; Attr : Word) : Boolean;
{--- HasAttr(Filename, Attr) ---------------------------------------------}
{ }
{ Returns "True" if "Filename" has the file attribute "Attr". }
{-------------------------------------------------------------------------}
Function ValidDIR(Const DirName : String) : String;
{--- ValidDIR(DIRname) ---------------------------------------------------}
{ }
{ Returns a string representing a valid path, created from "DirName" with }
{ the "\" character added if it is not already there. }
{-------------------------------------------------------------------------}
Implementation
Function GetFileList(Const FileSpec : String; List : TStrings) : LongInt;
Var
sRec : TSearchRec; { Required by "FindFirst" and "FindNext" }
spec : String; { For holding search specification }
sDir : String; { Holds full path }
fName : String; { For filename }
begin
List.Clear; { Clear the list, to add to existing list comment out }
spec := '';
sDir := '';
If (FileSpec <> '') then
begin
spec := ExtractFilename(FileSpec);
sdir := ExtractFilePath(FileSpec);
end
else spec := '*.*'; { Default to ALL files }
{ Check to see if we have a valid directory in the "FileSpec" }
{ If we don't we use the current directory. }
If (sDir = '') then GetDir(0, sDir);
{ Check and convert }
If (Length(sdir) > 0) then sDir := LowerCase(ValidDIR(sDir));
{ Look for the first file matching the file specification, "FindFirst" }
{ returns a non zero value if file not found. }
Result := FindFirst(sDir + spec, faAnyFile - faDirectory, sRec);
{ While we have a filename, build it up to a fully quallified filename }
While (Result = 0) do
begin
{ First, check to see if it's a directory }

If (sRec.Name[1] <> '.') then { It's not }
begin
{ Create full pathname }
fName := sDir + LowerCase(sRec.Name);
{ Add it to the string list }
List.Add(fName);
end;
{ Now look for the next match }
Result := FindNext(sRec);
end;
FindClose(sRec); { We have finished, so tell system }
Result := List.Count; { Return the number of items in the string list }
end;
Function ValidDIR(Const DirName : String) : String;
begin
Result := Dirname;
If (Result[Length(Result)] = '\') then Exit;
If FileExists(Dirname) then Result := ExtractFilePath(Dirname);
If HasAttr(Result, faDirectory) then AppendStr(Result, '\');
end;
Function HasAttr(Const FileName : String; Attr : Word) : Boolean;
begin
Result := (FileGetAttr(FileName) and Attr) = Attr;
end;
end.