From 1714855f8ec03cae1a2d4ebffaf86ead164c4daf Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 28 Mar 2003 19:06:59 +0000 Subject: [PATCH] * directoryexists added --- rtl/go32v2/sysutils.pp | 36 ++++++++++++++++++++++++++++++------ rtl/objpas/filutilh.inc | 6 +++++- rtl/unix/sysutils.pp | 15 ++++++++++++++- rtl/win32/sysutils.pp | 18 +++++++++++++++++- 4 files changed, 66 insertions(+), 9 deletions(-) diff --git a/rtl/go32v2/sysutils.pp b/rtl/go32v2/sysutils.pp index 2785fff065..16f5c73151 100644 --- a/rtl/go32v2/sysutils.pp +++ b/rtl/go32v2/sysutils.pp @@ -252,12 +252,33 @@ end; Function FileExists (Const FileName : String) : Boolean; -var Handle: longint; +Var + Sr : Searchrec; begin - //!! This can be done quicker, need to find out how - Result := (OpenFile(FileName, Handle, ofRead, faOpen) = 0); - if Handle <> 0 then - FileClose(Handle); + DOS.FindFirst(Path,$3f,sr); + if DosError = 0 then + begin + { No volumeid,directory } + Result:=(sr.attr and $18)=0; + Dos.FindClose(sr); + end + else + Result:=false; +end; + + +Function DirectoryExists (Const DirName : String) : Boolean; +Var + Sr : Searchrec; +begin + DOS.FindFirst(Path,$3f,sr); + if DosError = 0 then + begin + Result:=(sr.attr and $10)=$10; + Dos.FindClose(sr); + end + else + Result:=false; end; @@ -730,7 +751,10 @@ Finalization end. { $Log$ - Revision 1.11 2003-01-03 20:41:04 peter + Revision 1.12 2003-03-28 19:06:59 peter + * directoryexists added + + Revision 1.11 2003/01/03 20:41:04 peter * FileCreate(string,mode) overload added Revision 1.10 2002/09/07 16:01:19 peter diff --git a/rtl/objpas/filutilh.inc b/rtl/objpas/filutilh.inc index d887de180c..b4a0efa13e 100644 --- a/rtl/objpas/filutilh.inc +++ b/rtl/objpas/filutilh.inc @@ -70,6 +70,7 @@ Procedure FileClose (Handle : Longint); Function FileTruncate (Handle,Size: Longint) : boolean; Function FileAge (Const FileName : String): Longint; Function FileExists (Const FileName : String) : Boolean; +Function DirectoryExists (Const DirName : String) : Boolean; Function FindFirst (Const Path : String; Attr : Longint; Var Rslt : TSearchRec) : Longint; Function FindNext (Var Rslt : TSearchRec) : Longint; Procedure FindClose (Var F : TSearchrec); @@ -84,7 +85,10 @@ Function FileSearch (Const Name, DirList : String) : String; { $Log$ - Revision 1.7 2003-01-03 20:41:04 peter + Revision 1.8 2003-03-28 19:06:59 peter + * directoryexists added + + Revision 1.7 2003/01/03 20:41:04 peter * FileCreate(string,mode) overload added Revision 1.6 2002/09/07 16:01:22 peter diff --git a/rtl/unix/sysutils.pp b/rtl/unix/sysutils.pp index 3588127319..3dc0834295 100644 --- a/rtl/unix/sysutils.pp +++ b/rtl/unix/sysutils.pp @@ -142,6 +142,16 @@ begin end; +Function DirectoryExists (Const DirName : String) : Boolean; + +Var Info : Stat; + +begin + DirectoryExists:=fstat(dirname,Info) and + ((info.mode and STAT_IFMT)=STAT_IFDIR); +end; + + Function LinuxToWinAttr (FN : Pchar; Const Info : Stat) : Longint; begin @@ -481,7 +491,10 @@ end. { $Log$ - Revision 1.14 2003-01-03 20:41:04 peter + Revision 1.15 2003-03-28 19:06:59 peter + * directoryexists added + + Revision 1.14 2003/01/03 20:41:04 peter * FileCreate(string,mode) overload added Revision 1.13 2002/09/07 16:01:28 peter diff --git a/rtl/win32/sysutils.pp b/rtl/win32/sysutils.pp index 82f3ab8e9a..f5655ce03b 100644 --- a/rtl/win32/sysutils.pp +++ b/rtl/win32/sysutils.pp @@ -186,6 +186,19 @@ begin end; +Function DirectoryExists (Const DirName : String) : Boolean; +var + Handle: THandle; + FindData: TWin32FindData; +begin + Handle := FindFirstFile(Pchar(FileName), @FindData); + Result:=(Handle <> INVALID_HANDLE_VALUE) and + ((FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY); + If Result then + Windows.FindClose(Handle); +end; + + Function FindMatch(var f: TSearchRec) : Longint; begin { Find file with correct attribute } @@ -670,7 +683,10 @@ Finalization end. { $Log$ - Revision 1.19 2003-01-03 20:41:04 peter + Revision 1.20 2003-03-28 19:06:59 peter + * directoryexists added + + Revision 1.19 2003/01/03 20:41:04 peter * FileCreate(string,mode) overload added Revision 1.18 2003/01/01 20:56:57 florian