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.