Browse Source

* Make methods static so they are assignment compatible with regular procedures.

Michaël Van Canneyt 1 year ago
parent
commit
cda64d090e
1 changed files with 166 additions and 167 deletions
  1. 166 167
      packages/vcl-compat/src/system.ioutils.pp

+ 166 - 167
packages/vcl-compat/src/system.ioutils.pp

@@ -78,79 +78,79 @@ type
   TDirectory = class
 
   protected
-    class function GetFilesAndDirectories(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption; const SearchAttributes: TFileAttributes; const aPredicate: TFilterPredicateLocal): TStringDynArray;  overload;
-    class function GetFilesAndDirectories(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption; const SearchAttributes: TFileAttributes; const aPredicate: TFilterPredicateObject): TStringDynArray;  overload;
-    class function GetFilesAndDirectories(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption; const SearchAttributes: TFileAttributes; const aPredicate: TFilterPredicate): TStringDynArray;  overload;
+    class function GetFilesAndDirectories(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption; const SearchAttributes: TFileAttributes; const aPredicate: TFilterPredicateLocal): TStringDynArray;  overload; static;
+    class function GetFilesAndDirectories(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption; const SearchAttributes: TFileAttributes; const aPredicate: TFilterPredicateObject): TStringDynArray;  overload; static;
+    class function GetFilesAndDirectories(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption; const SearchAttributes: TFileAttributes; const aPredicate: TFilterPredicate): TStringDynArray;  overload; static;
   public
-    class procedure Copy(const SourceDirName, DestDirName: string);
-    class procedure CreateDirectory(const aPath: string);
-    class procedure Delete(const aPath: string); overload;
-    class procedure Delete(const aPath: string; const Recursive: Boolean); overload;
-    class function Exists(const aPath: string; FollowLink: Boolean = True): Boolean;
-    class function GetAttributes(const aPath: string; FollowLink: Boolean = True): TFileAttributes;
-    class function GetCurrentDirectory: string;
-    class procedure SetCurrentDirectory(const aPath: string);
-    class function GetLogicalDrives: TStringDynArray;
+    class procedure Copy(const SourceDirName, DestDirName: string); static;
+    class procedure CreateDirectory(const aPath: string); static;
+    class procedure Delete(const aPath: string); overload; static;
+    class procedure Delete(const aPath: string; const Recursive: Boolean); overload; static;
+    class function Exists(const aPath: string; FollowLink: Boolean = True): Boolean; static;
+    class function GetAttributes(const aPath: string; FollowLink: Boolean = True): TFileAttributes; static;
+    class function GetCurrentDirectory: string; static;
+    class procedure SetCurrentDirectory(const aPath: string); static;
+    class function GetLogicalDrives: TStringDynArray; static;
     //class function GetCreationTime(const aPath: string): TDateTime;
     //class function GetCreationTimeUtc(const aPath: string): TDateTime;
     //class function GetLastAccessTime(const aPath: string): TDateTime;
     //class function GetLastAccessTimeUtc(const aPath: string): TDateTime;
     //class function GetLastWriteTime(const aPath: string): TDateTime;
     //class function GetLastWriteTimeUtc(const aPath: string): TDateTime;
-    class procedure SetAttributes(const aPath: string; const Attributes: TFileAttributes);
+    class procedure SetAttributes(const aPath: string; const Attributes: TFileAttributes); static;
     //class procedure SetCreationTime(const aPath: string; const CreationTime: TDateTime);
     //class procedure SetCreationTimeUtc(const aPath: string; const CreationTime: TDateTime);
     //class procedure SetLastAccessTime(const aPath: string; const LastAccessTime: TDateTime);
     //class procedure SetLastAccessTimeUtc(const aPath: string; const LastAccessTime: TDateTime);
     //class procedure SetLastWriteTime(const aPath: string; const LastWriteTime: TDateTime);
     //class procedure SetLastWriteTimeUtc(const aPath: string; const LastWriteTime: TDateTime);
-    class function GetParent(const aPath: string): string;
-    class function GetDirectories(const aPath: string): TStringDynArray; overload;
-    class function GetDirectories(const aPath: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload;
-    class function GetDirectories(const aPath: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload;
-    class function GetDirectories(const aPath: string; const aPredicate: TFilterPredicate): TStringDynArray; overload;
-    class function GetDirectories(const aPath, aSearchPattern: string): TStringDynArray; overload;
-    class function GetDirectories(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload;
-    class function GetDirectories(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload;
-    class function GetDirectories(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicate): TStringDynArray; overload;
-    class function GetDirectories(const aPath, aSearchPattern: string; const aSearchOption: TSearchOption): TStringDynArray; overload;
-    class function GetDirectories(const aPath, aSearchPattern: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload;
-    class function GetDirectories(const aPath, aSearchPattern: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateObject): TStringDynArray; overload;
-    class function GetDirectories(const aPath, aSearchPattern: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicate): TStringDynArray; overload;
-    class function GetDirectories(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload;
-    class function GetDirectories(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateObject): TStringDynArray; overload;
-    class function GetDirectories(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicate): TStringDynArray; overload;
+    class function GetParent(const aPath: string): string; static;
+    class function GetDirectories(const aPath: string): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath: string; const aPredicate: TFilterPredicate): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath, aSearchPattern: string): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicate): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath, aSearchPattern: string; const aSearchOption: TSearchOption): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath, aSearchPattern: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath, aSearchPattern: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateObject): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath, aSearchPattern: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicate): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateObject): TStringDynArray; overload; static;
+    class function GetDirectories(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicate): TStringDynArray; overload; static;
     //class function GetDirectoryRoot(const aPath: string): string; { TODO -odj : UNC => \\Servername\Freigabe, sonst c:\, d:\ usw. }
-    class function GetFiles(const aPath: string): TStringDynArray; overload;
-    class function GetFiles(const aPath: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload;
-    class function GetFiles(const aPath: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload;
-    class function GetFiles(const aPath: string; const aPredicate: TFilterPredicate): TStringDynArray; overload;
-    class function GetFiles(const aPath, aSearchPattern: string): TStringDynArray; overload;
-    class function GetFiles(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload;
-    class function GetFiles(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload;
-    class function GetFiles(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicate): TStringDynArray; overload;
-    class function GetFiles(const aPath, aSearchPattern: string; const aSearchOption: TSearchOption): TStringDynArray; overload;
-    class function GetFiles(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicateLocal): TStringDynArray; overload;
-    class function GetFiles(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicateObject): TStringDynArray; overload;
-    class function GetFiles(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicate): TStringDynArray; overload;
-    class function GetFiles(const aPath: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicateLocal): TStringDynArray; overload;
-    class function GetFiles(const aPath: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicateObject): TStringDynArray; overload;
-    class function GetFiles(const aPath: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicate): TStringDynArray; overload;
-    class function GetFileSystemEntries(const aPath: string): TStringDynArray;overload;
-    class function GetFileSystemEntries(const aPath: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload;
-    class function GetFileSystemEntries(const aPath: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload;
-    class function GetFileSystemEntries(const aPath: string; const aPredicate: TFilterPredicate): TStringDynArray; overload;
-    class function GetFileSystemEntries(const aPath, aSearchPattern: string): TStringDynArray; overload;
-    class function GetFileSystemEntries(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload;
-    class function GetFileSystemEntries(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload;
-    class function GetFileSystemEntries(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicate): TStringDynArray; overload;
-    class function GetFileSystemEntries(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload;
-    class function GetFileSystemEntries(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateObject): TStringDynArray; overload;
-    class function GetFileSystemEntries(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicate): TStringDynArray; overload;
-    Class Procedure ForAllEntries(const aPath, aPattern: string; const aBefore, aAfter: TFilterPredicateLocal; aRecursive: Boolean);
-    class function IsEmpty(const aPath: string): Boolean;
-    class function IsRelativePath(const aPath: string): Boolean;
-    class procedure Move(const SourceDirName, DestDirName: string);
+    class function GetFiles(const aPath: string): TStringDynArray; overload; static;
+    class function GetFiles(const aPath: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload; static;
+    class function GetFiles(const aPath: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload; static;
+    class function GetFiles(const aPath: string; const aPredicate: TFilterPredicate): TStringDynArray; overload; static;
+    class function GetFiles(const aPath, aSearchPattern: string): TStringDynArray; overload; static;
+    class function GetFiles(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload; static;
+    class function GetFiles(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload; static;
+    class function GetFiles(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicate): TStringDynArray; overload; static;
+    class function GetFiles(const aPath, aSearchPattern: string; const aSearchOption: TSearchOption): TStringDynArray; overload; static;
+    class function GetFiles(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicateLocal): TStringDynArray; overload; static;
+    class function GetFiles(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicateObject): TStringDynArray; overload; static;
+    class function GetFiles(const aPath, aSearchPattern: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicate): TStringDynArray; overload; static;
+    class function GetFiles(const aPath: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicateLocal): TStringDynArray; overload; static;
+    class function GetFiles(const aPath: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicateObject): TStringDynArray; overload; static;
+    class function GetFiles(const aPath: string;const aSearchOption: TSearchOption;const aPredicate: TFilterPredicate): TStringDynArray; overload; static;
+    class function GetFileSystemEntries(const aPath: string): TStringDynArray;overload; static;
+    class function GetFileSystemEntries(const aPath: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload; static;
+    class function GetFileSystemEntries(const aPath: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload; static;
+    class function GetFileSystemEntries(const aPath: string; const aPredicate: TFilterPredicate): TStringDynArray; overload; static;
+    class function GetFileSystemEntries(const aPath, aSearchPattern: string): TStringDynArray; overload; static;
+    class function GetFileSystemEntries(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload; static;
+    class function GetFileSystemEntries(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicateObject): TStringDynArray; overload; static;
+    class function GetFileSystemEntries(const aPath, aSearchPattern: string; const aPredicate: TFilterPredicate): TStringDynArray; overload; static;
+    class function GetFileSystemEntries(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateLocal): TStringDynArray; overload; static;
+    class function GetFileSystemEntries(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicateObject): TStringDynArray; overload; static;
+    class function GetFileSystemEntries(const aPath: string; const aSearchOption: TSearchOption; const aPredicate: TFilterPredicate): TStringDynArray; overload; static;
+    Class Procedure ForAllEntries(const aPath, aPattern: string; const aBefore, aAfter: TFilterPredicateLocal; aRecursive: Boolean); static;
+    class function IsEmpty(const aPath: string): Boolean; static;
+    class function IsRelativePath(const aPath: string): Boolean; static;
+    class procedure Move(const SourceDirName, DestDirName: string); static;
   end;
 
   { TPath }
@@ -165,71 +165,71 @@ type
     class var FInvalidPathChars : TCharArray;
     class var FinvalidFileNameChars : TCharArray;
     // FNMatch is case sensitive!
-    class function FNMatch(const Pattern, Name: string): Boolean;
-    class function IntGetPathRoot(const aPath: string): string;
+    class function FNMatch(const Pattern, Name: string): Boolean; static;
+    class function IntGetPathRoot(const aPath: string): string; static;
     // Return position of first char after \\?\(UNC). Optionally return prefixtype.
-    class function SkipExtendedPrefix(const aPath: string; out Prefix: TPathPrefixType): SizeInt;
-    class function SkipExtendedPrefix(const aPath: String): SizeInt;
+    class function SkipExtendedPrefix(const aPath: string; out Prefix: TPathPrefixType): SizeInt; static;
+    class function SkipExtendedPrefix(const aPath: String): SizeInt; static;
   public
     class constructor Create;
-    class function IsValidPathChar(const AChar: Char): Boolean;
-    class function IsValidFileNameChar(const AChar: Char): Boolean;
-    class function HasValidPathChars(const aPath: string; const UseWildcards: Boolean = false): Boolean; inline;
-    class function HasValidPathChars(const aPath: string; out Index: Integer; const UseWildcards: Boolean = false): Boolean;
-    class function HasValidFileNameChars(const FileName: string; const UseWildcards: Boolean = False): Boolean; inline;
-    class function HasValidFileNameChars(const FileName: string; out Index: Integer; const UseWildcards: Boolean = False): Boolean;
-    class function GetExtendedPrefix(const aPath: string): TPathPrefixType;
-    class function IsDriveRooted(const aPath: string): Boolean;
-    class function IsExtendedPrefixed(const aPath: string): Boolean;
-    class function IsRelativePath(const aPath: string): Boolean;
-    class function IsUNCPath(const aPath: string): Boolean;
-    class function IsUNCRooted(const aPath: string): Boolean;
-    class function GetGUIDFileName(const UseSeparator: Boolean = False): string;
-    class function DriveExists(const aPath: string): Boolean;
-    class function MatchesPattern(const FileName, Pattern: string; const CaseSensitive: Boolean): Boolean;
-    class function ChangeExtension(const aPath, Extension: string): string;
-    class function Combine(const Path1, Path2: string; const ValidateParams: Boolean = True): string;
-    class function Combine(const Path1, Path2, Path3: string; const ValidateParams: Boolean = True): string;
-    class function Combine(const Path1, Path2, Path3, Path4: string; const ValidateParams: Boolean = True): string;
-    class function Combine(const Paths: array of string; const ValidateParams: Boolean = True): string;
-    class function GetDirectoryName(FileName: string): string;
-    class function GetExtension(const FileName: string): string;
-    class function GetFileName(const FileName: string): string;
-    class function GetFileNameWithoutExtension(const FileName: string): string;
-    class function GetFullPath(const aPath: string): string;
-    class function GetInvalidFileNameChars: TCharArray;
-    class function GetInvalidPathChars: TCharArray;
-    class function GetPathRoot(const aPath: string): string;
-    class function GetRandomFileName: string;
-    class function GetTempFileName: string;
-    class function GetTempPath: string;
-    class function GetHomePath: string;
-    class function GetDocumentsPath: string;
-    class function GetDesktopPath: string;
-    class function GetSharedDocumentsPath: string;
-    class function GetLibraryPath: string;
-    class function GetAppPath: string;
-    class function GetCachePath: string;
-    class function GetPublicPath: string;
-    class function GetPicturesPath: string;
-    class function GetSharedPicturesPath: string;
-    class function GetCameraPath: string;
-    class function GetSharedCameraPath: string;
-    class function GetMusicPath: string;
-    class function GetSharedMusicPath: string;
-    class function GetMoviesPath: string;
-    class function GetSharedMoviesPath: string;
-    class function GetAlarmsPath: string;
-    class function GetSharedAlarmsPath: string;
-    class function GetDownloadsPath: string;
-    class function GetSharedDownloadsPath: string;
-    class function GetRingtonesPath: string;
-    class function GetSharedRingtonesPath: string;
+    class function IsValidPathChar(const AChar: Char): Boolean; static;
+    class function IsValidFileNameChar(const AChar: Char): Boolean; static;
+    class function HasValidPathChars(const aPath: string; const UseWildcards: Boolean = false): Boolean; inline; static;
+    class function HasValidPathChars(const aPath: string; out Index: Integer; const UseWildcards: Boolean = false): Boolean; static;
+    class function HasValidFileNameChars(const FileName: string; const UseWildcards: Boolean = False): Boolean; inline; static;
+    class function HasValidFileNameChars(const FileName: string; out Index: Integer; const UseWildcards: Boolean = False): Boolean; static;
+    class function GetExtendedPrefix(const aPath: string): TPathPrefixType; static;
+    class function IsDriveRooted(const aPath: string): Boolean; static;
+    class function IsExtendedPrefixed(const aPath: string): Boolean; static;
+    class function IsRelativePath(const aPath: string): Boolean; static;
+    class function IsUNCPath(const aPath: string): Boolean; static;
+    class function IsUNCRooted(const aPath: string): Boolean; static;
+    class function GetGUIDFileName(const UseSeparator: Boolean = False): string; static;
+    class function DriveExists(const aPath: string): Boolean; static;
+    class function MatchesPattern(const FileName, Pattern: string; const CaseSensitive: Boolean): Boolean; static;
+    class function ChangeExtension(const aPath, Extension: string): string; static;
+    class function Combine(const Path1, Path2: string; const ValidateParams: Boolean = True): string; static;
+    class function Combine(const Path1, Path2, Path3: string; const ValidateParams: Boolean = True): string; static;
+    class function Combine(const Path1, Path2, Path3, Path4: string; const ValidateParams: Boolean = True): string; static;
+    class function Combine(const Paths: array of string; const ValidateParams: Boolean = True): string; static;
+    class function GetDirectoryName(FileName: string): string; static;
+    class function GetExtension(const FileName: string): string; static;
+    class function GetFileName(const FileName: string): string; static;
+    class function GetFileNameWithoutExtension(const FileName: string): string; static;
+    class function GetFullPath(const aPath: string): string; static;
+    class function GetInvalidFileNameChars: TCharArray; static;
+    class function GetInvalidPathChars: TCharArray; static;
+    class function GetPathRoot(const aPath: string): string; static;
+    class function GetRandomFileName: string; static;
+    class function GetTempFileName: string; static;
+    class function GetTempPath: string; static;
+    class function GetHomePath: string; static;
+    class function GetDocumentsPath: string; static;
+    class function GetDesktopPath: string; static;
+    class function GetSharedDocumentsPath: string; static;
+    class function GetLibraryPath: string; static;
+    class function GetAppPath: string; static;
+    class function GetCachePath: string;  static;
+    class function GetPublicPath: string; static;
+    class function GetPicturesPath: string; static;
+    class function GetSharedPicturesPath: string; static;
+    class function GetCameraPath: string; static;
+    class function GetSharedCameraPath: string; static;
+    class function GetMusicPath: string; static;
+    class function GetSharedMusicPath: string; static;
+    class function GetMoviesPath: string; static;
+    class function GetSharedMoviesPath: string; static;
+    class function GetAlarmsPath: string; static;
+    class function GetSharedAlarmsPath: string; static;
+    class function GetDownloadsPath: string; static;
+    class function GetSharedDownloadsPath: string; static;
+    class function GetRingtonesPath: string; static;
+    class function GetSharedRingtonesPath: string; static;
     class function GetTemplatesPath: string;
-    class function GetAttributes(const aPath: string; aFollowLink: Boolean = True): TFileAttributes;
-    class procedure SetAttributes(const aPath: string; const aAttributes: TFileAttributes);
-    class function HasExtension(const aPath: string): Boolean;
-    class function IsPathRooted(const aPath: string): Boolean;
+    class function GetAttributes(const aPath: string; aFollowLink: Boolean = True): TFileAttributes; static;
+    class procedure SetAttributes(const aPath: string; const aAttributes: TFileAttributes); static;
+    class function HasExtension(const aPath: string): Boolean; static;
+    class function IsPathRooted(const aPath: string): Boolean; static;
     class property ExtensionSeparatorChar: Char read FExtensionSeparatorChar;
     class property AltDirectorySeparatorChar: Char read FAltDirectorySeparatorChar;
     class property DirectorySeparatorChar: Char read FDirectorySeparatorChar;
@@ -241,66 +241,65 @@ type
 
   TFile = class
   private
-    class function DetectFileEncoding(const aPath: String; out BOMLength: Integer
-      ): TEncoding;
-    class procedure GetFileTimestamps(const aFilename: TFileName; var aCreate, aWrite, aAccess: TDateTime; IsUTC : Boolean);
+    class function DetectFileEncoding(const aPath: String; out BOMLength: Integer): TEncoding; static;
+    class procedure GetFileTimestamps(const aFilename: TFileName; var aCreate, aWrite, aAccess: TDateTime; IsUTC : Boolean); static;
   public
-    class function IntegerToFileAttributes(const Attributes: Integer): TFileAttributes;
-    class function FileAttributesToInteger(const Attributes: TFileAttributes): Integer;
-    class function Create(const aPath: string): TFileStream; overload;
-    class function Create(const aPath: string; const BufferSize: Integer): TFileStream; overload;
-    Class function OpenOrCreate(const aPath: string) : TFileStream;
-    class procedure AppendAllText(const aPath, aContents: string); overload;
-    class procedure AppendAllText(const aPath, Contents: string; const Encoding: TEncoding); overload;
-    class function AppendText(const aPath: string): TStreamWriter;
-    class procedure Copy(const SourceFileName, DestFileName: string); overload;
-    class procedure Copy(const SourceFileName, DestFileName: string; const Overwrite: Boolean); overload;
-    class function CreateSymLink(const Link, Target: string): Boolean;
-    class function CreateText(const aPath: string): TStreamWriter;
-    class procedure Delete(const aPath: string);
+    class function IntegerToFileAttributes(const Attributes: Integer): TFileAttributes; static;
+    class function FileAttributesToInteger(const Attributes: TFileAttributes): Integer; static;
+    class function Create(const aPath: string): TFileStream; overload; static;
+    class function Create(const aPath: string; const BufferSize: Integer): TFileStream; overload; static;
+    Class function OpenOrCreate(const aPath: string) : TFileStream; static;
+    class procedure AppendAllText(const aPath, aContents: string); overload; static;
+    class procedure AppendAllText(const aPath, Contents: string; const Encoding: TEncoding); overload; static;
+    class function AppendText(const aPath: string): TStreamWriter; static;
+    class procedure Copy(const SourceFileName, DestFileName: string); overload; static;
+    class procedure Copy(const SourceFileName, DestFileName: string; const Overwrite: Boolean); overload; static;
+    class function CreateSymLink(const Link, Target: string): Boolean; static;
+    class function CreateText(const aPath: string): TStreamWriter; static;
+    class procedure Delete(const aPath: string); static;
 //{$IFDEF MSWINDOWS}
 //    class procedure Decrypt(const aPath: string);
 //    class procedure Encrypt(const aPath: string);
 //{$ENDIF MSWINDOWS}
-    class function Exists(const aPath: string; FollowLink: Boolean = True): Boolean;
-    class function GetAttributes(const aPath: string; FollowLink: Boolean = True): TFileAttributes;
-    class function GetCreationTime(const aPath: string): TDateTime;
-    class function GetCreationTimeUtc(const aPath: string): TDateTime;
-    class function GetLastAccessTime(const aPath: string): TDateTime;
-    class function GetLastAccessTimeUtc(const aPath: string): TDateTime;
-    class function GetLastWriteTime(const aPath: string): TDateTime;
-    class function GetLastWriteTimeUtc(const aPath: string): TDateTime;
-    class function GetSymLinkTarget(const aFileName: string; var SymLinkRec: TSymLinkRec): Boolean; overload;
-    class function GetSymLinkTarget(const aFileName: string; var TargetName: RawByteString): Boolean; overload;
-    class function GetSymLinkTarget(const aFileName: Unicodestring; var TargetName: UnicodeString): Boolean; overload;
-    class procedure Move(SourceFileName, DestFileName: string);
-    class function Open(const aPath: string; const aMode: TFileMode): TFileStream; overload;
-    class function Open(const aPath: string; const aMode: TFileMode; const aAccess: TFileAccess): TFileStream; overload;
-    class function Open(const aPath: string; const aMode: TFileMode; const aAccess: TFileAccess; const aShare: TFileShare): TFileStream; overload;
-    class function OpenRead(const aPath: string): TFileStream;
-    class function OpenText(const aPath: string): TStreamReader;
-    class function OpenWrite(const aPath: string): TFileStream;
-    class function ReadAllBytes(const aPath: string): TBytes;
-    class function ReadAllLines(const aPath: string): TStringDynArray; overload;
-    class function ReadAllLines(const aPath: string; const aEncoding: TEncoding): TStringDynArray; overload;
-    class function ReadAllText(const aPath: string): string; overload;
-    class function ReadAllText(const aPath: string; const aEncoding: TEncoding): string; overload;
-    class procedure Replace(const aSource, aDestination, aBackup: string); overload;
+    class function Exists(const aPath: string; FollowLink: Boolean = True): Boolean; static;
+    class function GetAttributes(const aPath: string; FollowLink: Boolean = True): TFileAttributes; static;
+    class function GetCreationTime(const aPath: string): TDateTime; static;
+    class function GetCreationTimeUtc(const aPath: string): TDateTime; static;
+    class function GetLastAccessTime(const aPath: string): TDateTime; static;
+    class function GetLastAccessTimeUtc(const aPath: string): TDateTime; static;
+    class function GetLastWriteTime(const aPath: string): TDateTime; static;
+    class function GetLastWriteTimeUtc(const aPath: string): TDateTime; static;
+    class function GetSymLinkTarget(const aFileName: string; var SymLinkRec: TSymLinkRec): Boolean; overload; static;
+    class function GetSymLinkTarget(const aFileName: string; var TargetName: RawByteString): Boolean; overload; static;
+    class function GetSymLinkTarget(const aFileName: Unicodestring; var TargetName: UnicodeString): Boolean; overload; static;
+    class procedure Move(SourceFileName, DestFileName: string); static;
+    class function Open(const aPath: string; const aMode: TFileMode): TFileStream; overload; static;
+    class function Open(const aPath: string; const aMode: TFileMode; const aAccess: TFileAccess): TFileStream; overload; static;
+    class function Open(const aPath: string; const aMode: TFileMode; const aAccess: TFileAccess; const aShare: TFileShare): TFileStream; overload; static;
+    class function OpenRead(const aPath: string): TFileStream; static;
+    class function OpenText(const aPath: string): TStreamReader; static;
+    class function OpenWrite(const aPath: string): TFileStream; static;
+    class function ReadAllBytes(const aPath: string): TBytes; static;
+    class function ReadAllLines(const aPath: string): TStringDynArray; overload; static;
+    class function ReadAllLines(const aPath: string; const aEncoding: TEncoding): TStringDynArray; overload; static;
+    class function ReadAllText(const aPath: string): string; overload; static;
+    class function ReadAllText(const aPath: string; const aEncoding: TEncoding): string; overload; static;
+    class procedure Replace(const aSource, aDestination, aBackup: string); overload; static;
 {$IFDEF MSWINDOWS}
-    class procedure Replace(const aSource, aDestination, aBackup: string; const aIgnoreMetadataErrors: Boolean); overload;
+    class procedure Replace(const aSource, aDestination, aBackup: string; const aIgnoreMetadataErrors: Boolean); overload; static;
 {$ENDIF MSWINDOWS}
-    class procedure SetAttributes(const aPath: string; const aAttributes: TFileAttributes);
+    class procedure SetAttributes(const aPath: string; const aAttributes: TFileAttributes); static;
 //    class procedure SetCreationTime(const aPath: string; const CreationTime: TDateTime);
 //    class procedure SetCreationTimeUtc(const aPath: string; const CreationTime: TDateTime);
 //    class procedure SetLastAccessTime(const aPath: string; const LastAccessTime: TDateTime);
 //    class procedure SetLastAccessTimeUtc(const aPath: string; const LastAccessTime: TDateTime);
 //    class procedure SetLastWriteTime(const aPath: string; const LastWriteTime: TDateTime);
 //    class procedure SetLastWriteTimeUtc(const aPath: string; const LastWriteTime: TDateTime);
-    class procedure WriteAllBytes(const aPath: string; const aBytes: TBytes);
-    class procedure WriteAllLines(const aPath: string; const aContents: TStringDynArray); overload;
-    class procedure WriteAllLines(const aPath: string; const aContents: TStringDynArray; const aEncoding: TEncoding); overload;
-    class procedure WriteAllText(const aPath, aContents: string); overload;
-    class procedure WriteAllText(const aPath, aContents: string; const aEncoding: TEncoding); overload;
+    class procedure WriteAllBytes(const aPath: string; const aBytes: TBytes); static;
+    class procedure WriteAllLines(const aPath: string; const aContents: TStringDynArray); overload; static;
+    class procedure WriteAllLines(const aPath: string; const aContents: TStringDynArray; const aEncoding: TEncoding); overload; static;
+    class procedure WriteAllText(const aPath, aContents: string); overload; static;
+    class procedure WriteAllText(const aPath, aContents: string; const aEncoding: TEncoding); overload; static;
   end;
 
 implementation