diff --git a/Information/Readme.txt b/Information/Readme.txt index abff6a1..b73c20f 100644 --- a/Information/Readme.txt +++ b/Information/Readme.txt @@ -3,7 +3,7 @@ library for Delphi. It is being actively developed by Dennis Göhlert and other voluntary programmers and being improved almost every day. The base release platform is Delphi XE5 on Windows 8.1, but there -is also compatibility for older and newer releases od Delphi. +is also compatibility for older and newer releases of Delphi. Lazarus is currently not officially supported. For more information on Lina Components, such as how to set it up diff --git a/Information/Statistics.txt b/Information/Statistics.txt index 14e0788..c2e2776 100644 --- a/Information/Statistics.txt +++ b/Information/Statistics.txt @@ -1,4 +1,4 @@ These statistics cover the official repository of Lina Components. -Total lines of code (LoC): 3100+ +Total lines of code (LoC): 3800+ Total visual components (VC): 9 \ No newline at end of file diff --git a/Package/Delphi_XE5/LINA_D_XE5.dpk b/Package/Delphi_XE5/LINA_D_XE5.dpk index e448b22..16a6cff 100644 --- a/Package/Delphi_XE5/LINA_D_XE5.dpk +++ b/Package/Delphi_XE5/LINA_D_XE5.dpk @@ -1,6 +1,7 @@ package LINA_D_XE5; {$R *.res} +{$R '..\..\Resource\Compiled\uAdvCtrls.dcr'} {$R '..\..\Resource\Compiled\uBattery.dcr'} {$R '..\..\Resource\Compiled\uFrmCtrls.dcr'} {$R '..\..\Resource\Compiled\uLocalMgr.dcr'} diff --git a/Package/Delphi_XE5/LINA_D_XE5.dproj b/Package/Delphi_XE5/LINA_D_XE5.dproj index 6be0bff..23dd4b1 100644 --- a/Package/Delphi_XE5/LINA_D_XE5.dproj +++ b/Package/Delphi_XE5/LINA_D_XE5.dproj @@ -100,6 +100,7 @@ MainSource + diff --git a/Package/Delphi_XE5/LINA_D_XE5.dproj.local b/Package/Delphi_XE5/LINA_D_XE5.dproj.local index 20d4f6f..598c9fa 100644 --- a/Package/Delphi_XE5/LINA_D_XE5.dproj.local +++ b/Package/Delphi_XE5/LINA_D_XE5.dproj.local @@ -1,39 +1,39 @@  - 1899.12.30 00:00:00.000.325,=dbrtl.dcp - 1899.12.30 00:00:00.000.681,C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Resource\Lina.rc= - 1899.12.30 00:00:00.000.508,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uBase.pas - 1899.12.30 00:00:00.000.592,=C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\uFileTools.pas - 1899.12.30 00:00:00.000.675,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Package\Delphi_XE5\Unit1.pas - 1899.12.30 00:00:00.000.791,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Package\Delphi_XE5\Unit1.pas 1899.12.30 00:00:00.000.809,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Resource\Lina.rc + 1899.12.30 00:00:00.000.325,=dbrtl.dcp + 1899.12.30 00:00:00.000.592,=C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\uFileTools.pas + 1899.12.30 00:00:00.000.681,C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Resource\Lina.rc= + 1899.12.30 00:00:00.000.675,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Package\Delphi_XE5\Unit1.pas 1899.12.30 00:00:00.000.412,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Package\Delphi_XE5\Unit1.pas + 1899.12.30 00:00:00.000.411,C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Package\Delphi_XE5\Unit1.pas=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uAdvCtrls.pas + 1899.12.30 00:00:00.000.582,C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Package\Delphi_XE5\Unit1.pas=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uWebCtrls.pas 1899.12.30 00:00:00.000.576,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uSysTools.pas - 1899.12.30 00:00:00.000.318,=vcl.dcp + 1899.12.30 00:00:00.000.414,C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\uLinaTest.pas= 1899.12.30 00:00:00.000.556,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uLocalMgr.pas 1899.12.30 00:00:00.000.577,=C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\uBattery.pas - 1899.12.30 00:00:00.000.633,C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\LINA_D_XE5.dproj=C:\Users\Dennis\Documents\RAD Studio\Projekte\Package1.dproj - 1899.12.30 00:00:00.000.648,=C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\uScriptMgr.pas - 1899.12.30 00:00:00.000.518,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uBattery.pas 1899.12.30 00:00:00.000.621,=C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\uLinaTest.pas - 1899.12.30 00:00:00.000.414,C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\uLinaTest.pas= - 1899.12.30 00:00:00.000.525,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uCrypt.pas - 1899.12.30 00:00:00.000.672,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\uFrmCtrls.pas + 1899.12.30 00:00:00.000.518,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uBattery.pas + 1899.12.30 00:00:00.000.508,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uBase.pas + 1899.12.30 00:00:00.000.318,=vcl.dcp + 1899.12.30 00:00:00.000.648,=C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\uScriptMgr.pas 1899.12.30 00:00:00.000.196,=rtl.dcp + 1899.12.30 00:00:00.000.525,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uCrypt.pas 1899.12.30 00:00:00.000.686,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\uSysTools.pas + 1899.12.30 00:00:00.000.555,=C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\uBase.pas 1899.12.30 00:00:00.000.118,=IndyCore.dcp 1899.12.30 00:00:00.000.535,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uFileTools.pas + 1899.12.30 00:00:00.000.672,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\uFrmCtrls.pas 1899.12.30 00:00:00.000.633,=C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\uLocalMgr.pas - 1899.12.30 00:00:00.000.582,C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uWebCtrls.pas=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Package\Delphi_XE5\Unit1.pas - 1899.12.30 00:00:00.000.555,=C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\uBase.pas - 1899.12.30 00:00:00.000.546,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uFrmCtrls.pas - 1899.12.30 00:00:00.000.799,=PascalScript_Core_D19.dcp - 1899.12.30 00:00:00.000.566,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uScriptMgr.pas - 1899.12.30 00:00:00.000.411,C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uAdvCtrls.pas=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Package\Delphi_XE5\Unit1.pas - 1899.12.30 00:00:00.000.584,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uVirtObj.pas 1899.12.30 00:00:00.000.971,=IndySystem.dcp + 1899.12.30 00:00:00.000.546,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uFrmCtrls.pas 1899.12.30 00:00:00.000.857,=PascalScript_Core_D19.dcp + 1899.12.30 00:00:00.000.791,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Package\Delphi_XE5\Unit1.pas + 1899.12.30 00:00:00.000.566,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uScriptMgr.pas + 1899.12.30 00:00:00.000.633,C:\Users\Dennis\Documents\RAD Studio\Projekte\Package1.dproj=C:\Users\Dennis\Documents\RAD Studio\Projekte\LinaComponents\LINA_D_XE5.dproj + 1899.12.30 00:00:00.000.584,=C:\Users\Dennis G\Documents\RAD Studio\Projekte\LinaComponents\Source\uVirtObj.pas + 1899.12.30 00:00:00.000.799,=PascalScript_Core_D19.dcp 1899.12.30 00:00:00.000.045,=IndyProtocols.dcp @@ -46,6 +46,7 @@ + diff --git a/Package/Delphi_XE5/LINA_D_XE5.identcache b/Package/Delphi_XE5/LINA_D_XE5.identcache index 2961c23..aa555f0 100644 Binary files a/Package/Delphi_XE5/LINA_D_XE5.identcache and b/Package/Delphi_XE5/LINA_D_XE5.identcache differ diff --git a/Source/Compiled/uAdvCtrls.dcu b/Source/Compiled/uAdvCtrls.dcu index 0fb061c..2396b02 100644 Binary files a/Source/Compiled/uAdvCtrls.dcu and b/Source/Compiled/uAdvCtrls.dcu differ diff --git a/Source/Compiled/uBase.dcu b/Source/Compiled/uBase.dcu index 6f9272b..67e7fbc 100644 Binary files a/Source/Compiled/uBase.dcu and b/Source/Compiled/uBase.dcu differ diff --git a/Source/Compiled/uBattery.dcu b/Source/Compiled/uBattery.dcu index e2bdb06..2a61f4e 100644 Binary files a/Source/Compiled/uBattery.dcu and b/Source/Compiled/uBattery.dcu differ diff --git a/Source/Compiled/uCrypt.dcu b/Source/Compiled/uCrypt.dcu index 9c60719..6a4239c 100644 Binary files a/Source/Compiled/uCrypt.dcu and b/Source/Compiled/uCrypt.dcu differ diff --git a/Source/Compiled/uFileTools.dcu b/Source/Compiled/uFileTools.dcu index 58d619b..b18968c 100644 Binary files a/Source/Compiled/uFileTools.dcu and b/Source/Compiled/uFileTools.dcu differ diff --git a/Source/Compiled/uFrmCtrls.dcu b/Source/Compiled/uFrmCtrls.dcu index 94603d0..ae5c6c3 100644 Binary files a/Source/Compiled/uFrmCtrls.dcu and b/Source/Compiled/uFrmCtrls.dcu differ diff --git a/Source/Compiled/uLocalMgr.dcu b/Source/Compiled/uLocalMgr.dcu index 767026e..6863676 100644 Binary files a/Source/Compiled/uLocalMgr.dcu and b/Source/Compiled/uLocalMgr.dcu differ diff --git a/Source/Compiled/uScriptMgr.dcu b/Source/Compiled/uScriptMgr.dcu index bdc8c40..4b632b9 100644 Binary files a/Source/Compiled/uScriptMgr.dcu and b/Source/Compiled/uScriptMgr.dcu differ diff --git a/Source/Compiled/uSysTools.dcu b/Source/Compiled/uSysTools.dcu index 937aaf2..fa9d959 100644 Binary files a/Source/Compiled/uSysTools.dcu and b/Source/Compiled/uSysTools.dcu differ diff --git a/Source/Compiled/uVirtObj.dcu b/Source/Compiled/uVirtObj.dcu index b833996..7d544d7 100644 Binary files a/Source/Compiled/uVirtObj.dcu and b/Source/Compiled/uVirtObj.dcu differ diff --git a/Source/Compiled/uWebCtrls.dcu b/Source/Compiled/uWebCtrls.dcu index 81e5d73..7d1f1ba 100644 Binary files a/Source/Compiled/uWebCtrls.dcu and b/Source/Compiled/uWebCtrls.dcu differ diff --git a/Source/uFileTools.pas b/Source/uFileTools.pas index d118ca8..daf19fd 100644 --- a/Source/uFileTools.pas +++ b/Source/uFileTools.pas @@ -8,14 +8,9 @@ unit uFileTools; interface -{ Da Delphi vor Version 2009 noch keine Generics kannte, musste die TWinFiles- - Deklaration auf Compiler-Versionen 20.0 oder höher beschränkt werden. - Meines Wissens nach gibt es keine einfache Möglichkeit, Typisierte Listen - auch in ältere Versionen zu integrieren. } - uses { Standard-Units } - Classes, SysUtils, ShellAPI, Forms, Winapi.Windows, Dialogs, + Classes, SysUtils, ShellAPI, Forms, Windows, Dialogs, {$IFNDEF NO_GENERIC} Generics.Collections, {$ENDIF} @@ -24,6 +19,7 @@ uses type { Fehlermeldungen } + EDriveNoExist = class(Exception); EFileNoExist = class(Exception); EMissingTypeDesc = class(Exception); EMissingExts = class(Exception); @@ -33,36 +29,53 @@ type { Hilfsklassen } TFileExecuteMode = (feOpen,feEdit,feExplore,feFind,fePrint); TFileNameStyles = set of (fnDirectory,fnExtension); + TFileAttributes = set of (faReadOnly,faHidden,faSystem,faArchive,faTemporary); type { Hauptklassen } + TWinDrive = class + private + { Private-Deklarationen } + FDriveChar: Char; + public + { Public-Deklarationen } + constructor Create(ADriveChar: Char); + destructor Destroy; override; + property DriveChar: Char read FDriveChar; + function GetSpaceTotal: Int64; + function GetSpaceFree: Int64; + end; + TWinFile = class private { Private-Deklarationen } FFileName: String; FExecuteMode: TFileExecuteMode; + FDrive: TWinDrive; public { Public-Deklarationen } constructor Create(AFileName: String); - destructor Destroy; + destructor Destroy; override; property FileName: String read FFileName; property ExecuteMode: TFileExecuteMode read FExecuteMode write FExecuteMode; + property Drive: TWinDrive read FDrive write FDrive; function GetExtension(WithDot: Boolean = True): String; //ExtractFileExt() function GetPath: String; //ExtractFilePath() function GetDir: String; //ExtractFileDir() function GetFileName(WithExt: Boolean = True): String; //ExtractFileName() function GetFolderName: String; //ExtractFileFolder() - // GetSize: Int64 - // GetVersion: Extended - // GetAttribute: ... + function GetSize: Int64; //GetFileSize() + // GetVersion: Extended //GetFileVerion() + function GetAttributes: TFileAttributes; //GetFileAttributes(); // GetOwner: String - // GetCreated: TDateTime - // GetModified: TDateTime + function GetModified: TDateTime; //GetFileModified() + function GetCreated: TDateTime; //GetFileCreated() + function GetAccessed: TDateTime; //GetFileAccessed() function Execute: Boolean; //ExecuteFile() function SafeExecute: Boolean; //............. end; - TWinFiles = array of TWinFile; + TWinFileArray = array of TWinFile; {$IFNDEF NOGENERIC} TWinFileList = TList; @@ -74,9 +87,17 @@ type InDir: Boolean = False): Boolean; function ExtractFileFolder(FileName: String): String; procedure ListFiles(Dir: String; OutList: TStrings; FileExts: array of String; - NameStyles: TFileNameStyles = []); overload; + NameStyles: TFileNameStyles = []); procedure ListFolders(Dir: String; OutList: TStrings; - NameStyles: TFileNameStyles = []); overload; + NameStyles: TFileNameStyles = []); + function ExtractDriveChar(const FileName: String): Char; + function DriveCharToFileDir(DriveChar: Char): ShortString; + function DriveCharToFilePath(DriveChar: Char): ShortString; + function GetFileSize(FileName: String): Int64; + function GetFileModified(FileName: String): TDateTime; + function GetFileCreated(FileName: String): TDateTime; + function GetFileAccessed(FileName: String): TDateTime; + function GetFileAttributes(FileName: String): TFileAttributes; //const { Dateierweiterungen für ListFiles() } @@ -91,8 +112,6 @@ type implementation -{ TWinFile } - function FEModeToPChar(FEMode: TFileExecuteMode): PChar; begin case FEMode of @@ -212,10 +231,230 @@ begin Result := ExtractFileName(ExtractFileDir(FileName)); //Name d. übergeord. Ordners end; +function ExtractDriveChar(const FileName: String): Char; +begin + Result := FileName[1]; + if Length(FileName) >= 2 then + begin + if FileName[2] <> DriveDelim then + begin + Result := #0; + end else + begin + if Length(FileName) >= 3 then + begin + if FileName[3] <> PathDelim then + begin + Result := #0; + end; + end; + end; + end; +end; + +function DriveCharToFileDir(DriveChar: Char): ShortString; +begin + Result := DriveChar + DriveDelim; +end; + +function DriveCharToFilePath(DriveChar: Char): ShortString; +begin + Result := DriveCharToFileDir(DriveChar) + PathDelim; +end; + +function FileTimeToDateTime(FileTime: TFileTime): TDateTime; +var + LocalTime: TFileTime; + SysTime: TSystemTime; +begin + FileTimeToLocalFileTime(FileTime,LocalTime); + FileTimeToSystemTime(LocalTime,SysTime); + Result := SystemTimeToDateTime(SysTime); +end; + +function GetFileSize(FileName: String): Int64; +var + FileHandle: THandle; + FindData: TWIN32FINDDATA; +begin + Result := -1; + if FileExists(FileName) then + begin + FileHandle := FindFirstFile(pchar(FileName),FindData); + if FileHandle = INVALID_HANDLE_VALUE then + begin + Exit; + end; + Result := (FindData.nFileSizeHigh * (MAXDWORD)) + FindData.nFileSizeLow; + Windows.FindClose(FileHandle); + end; +end; + +function GetFileModified(FileName: String): TDateTime; +var + FileHandle: THandle; + FindData: TWIN32FINDDATA; +begin + Result := StrToTime('00.00.0000 00:00:00'); + if FileExists(FileName) then + begin + FileHandle := FindFirstFile(PChar(FileName),FindData); + if FileHandle = INVALID_HANDLE_VALUE then + begin + Exit; + end; + Result := FileTimeToDateTime(FindData.ftLastWriteTime); + Windows.FindClose(FileHandle); + end; +end; + +function GetFileCreated(FileName: String): TDateTime; +var + FileHandle: THandle; + FindData: TWIN32FINDDATA; +begin + Result := StrToTime('00.00.0000 00:00:00'); + if FileExists(FileName) then + begin + FileHandle := FindFirstFile(PChar(FileName),FindData); + if FileHandle = INVALID_HANDLE_VALUE then + begin + Exit; + end; + Result := FileTimeToDateTime(FindData.ftCreationTime); + Windows.FindClose(FileHandle); + end; +end; + +function GetFileAccessed(FileName: String): TDateTime; +var + FileHandle: THandle; + FindData: TWIN32FINDDATA; +begin + Result := StrToTime('00.00.0000 00:00:00'); + if FileExists(FileName) then + begin + FileHandle := FindFirstFile(PChar(FileName),FindData); + if FileHandle = INVALID_HANDLE_VALUE then + begin + Exit; + end; + Result := FileTimeToDateTime(FindData.ftLastAccessTime); + Windows.FindClose(FileHandle); + end; +end; + +function GetFileAttributes(FileName: String): TFileAttributes; +var + FileHandle: THandle; + FindData: TWIN32FINDDATA; +begin + Result := []; + if FileExists(FileName) then + begin + FileHandle := FindFirstFile(PChar(FileName),FindData); + if FileHandle = INVALID_HANDLE_VALUE then + begin + Exit; + end; + if (FindData.dwFileAttributes and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY then + begin + Result := Result + [faReadOnly]; + end; + if (FindData.dwFileAttributes and FILE_ATTRIBUTE_HIDDEN) = FILE_ATTRIBUTE_HIDDEN then + begin + Result := Result + [faHidden]; + end; + if (FindData.dwFileAttributes and FILE_ATTRIBUTE_SYSTEM) = FILE_ATTRIBUTE_SYSTEM then + begin + Result := Result + [faSystem]; + end; + if (FindData.dwFileAttributes and FILE_ATTRIBUTE_ARCHIVE) = FILE_ATTRIBUTE_ARCHIVE then + begin + Result := Result + [faArchive]; + end; + if (FindData.dwFileAttributes and FILE_ATTRIBUTE_TEMPORARY) = FILE_ATTRIBUTE_TEMPORARY then + begin + Result := Result + [faTemporary]; + end; + Windows.FindClose(FileHandle); + end; +end; + +{ ---------------------------------------------------------------------------- + TWinDrive + ---------------------------------------------------------------------------- } + +constructor TWinDrive.Create(ADriveChar: Char); +begin + FDriveChar := ADriveChar; + if DirectoryExists(ADriveChar) = False then + begin + raise EDriveNoExist.Create('Drive not found: "' + DriveChar + '"'); + end; +end; + +destructor TWinDrive.Destroy; +begin + //... + inherited; +end; + +function TWinDrive.GetSpaceTotal: Int64; +var + RootChars: array[0..4] of Char; + Root: PChar; + Dir: String; + Buffer: Int64; +begin + RootChars[0] := FDriveChar; + RootChars[1] := DriveDelim; + RootChars[2] := PathDelim; + RootChars[3] := #0; + Root := RootChars; + Dir := GetCurrentDir; + if SetCurrentDir(DriveCharToFilePath(FDriveChar)) then + begin + GetDiskFreeSpaceEx(Root,Buffer,Result,nil); + SetCurrentDir(Dir); + end else + begin + Result := -1; + end; +end; + +function TWinDrive.GetSpaceFree: Int64; +var + RootChars: array[0..4] of Char; + Root: PChar; + Dir: String; + Buffer: Int64; +begin + RootChars[0] := FDriveChar; + RootChars[1] := DriveDelim; + RootChars[2] := PathDelim; + RootChars[3] := #0; + Root := RootChars; + Dir := GetCurrentDir; + if SetCurrentDir(DriveCharToFilePath(FDriveChar)) then + begin + GetDiskFreeSpaceEx(Root,Result,Buffer,nil); + SetCurrentDir(Dir); + end else + begin + Result := -1; + end; +end; + +{ ---------------------------------------------------------------------------- + TWinFile + ---------------------------------------------------------------------------- } + constructor TWinFile.Create(AFileName: String); begin ExecuteMode := feOpen; FFileName := AFileName; + Drive := TWinDrive.Create(ExtractDriveChar(FFileName)); if FileExists(AFileName) = False then begin raise EFileNoExist.Create('File not found: "' + AFileName + '"'); @@ -224,7 +463,8 @@ end; destructor TWinFile.Destroy; begin - ExecuteMode := feOpen; + Drive.Free; + inherited; end; function TWinFile.GetExtension(WithDot: Boolean = True): String; @@ -254,6 +494,11 @@ begin Result := ExtractFileFolder(FFileName); end; +function TWinFile.GetSize: Int64; +begin + Result := GetFileSize(FFileName); +end; + function TWinFile.GetPath: String; begin Result := ExtractFilePath(FFileName); //Gesamter Ordnerpfad (ohne Dateiname) @@ -264,14 +509,34 @@ begin Result := ExtractFileDir(FFileName); end; +function TWinFile.GetModified: TDateTime; +begin + Result := GetFileModified(FFileName); +end; + +function TWinFile.GetCreated: TDateTime; +begin + Result := GetFileCreated(FFileName); +end; + +function TWinFile.GetAccessed: TDateTime; +begin + Result := GetFileAccessed(FFileName); +end; + +function TWinFile.GetAttributes: TFileAttributes; +begin + Result := GetFileAttributes(FFileName); +end; + function TWinFile.Execute: Boolean; begin - Result := ExecuteFile(FileName,ExecuteMode); + Result := ExecuteFile(FFileName,ExecuteMode); end; function TWinFile.SafeExecute: Boolean; begin - Result := ExecuteFile(FileName,ExecuteMode,True); + Result := ExecuteFile(FFileName,ExecuteMode,True); end; end.