|
@@ -230,7 +230,7 @@ type
|
|
|
private
|
|
|
class function DetectFileEncoding(const aPath: String; out BOMLength: Integer
|
|
|
): TEncoding;
|
|
|
- class procedure GetFileTimestamps(const aFilename: TFileName; var CreateUTC, WriteUTC, AccessUTC: TDateTime);
|
|
|
+ class procedure GetFileTimestamps(const aFilename: TFileName; var aCreate, aWrite, aAccess: TDateTime; IsUTC : Boolean);
|
|
|
public
|
|
|
class function IntegerToFileAttributes(const Attributes: Integer): TFileAttributes;
|
|
|
class function FileAttributesToInteger(const Attributes: TFileAttributes): Integer;
|
|
@@ -1384,44 +1384,26 @@ end;
|
|
|
|
|
|
{ TFile }
|
|
|
|
|
|
-class procedure TFile.GetFileTimestamps(const aFilename: TFileName;
|
|
|
- var CreateUTC, WriteUTC, AccessUTC: TDateTime);
|
|
|
- {$IfDef MSWINDOWS}
|
|
|
- var
|
|
|
- Info: TWin32FileAttributeData;
|
|
|
- DosTime: DWORD;
|
|
|
- {$endif}
|
|
|
- {$ifdef UNIX}
|
|
|
- var
|
|
|
- Info: stat;
|
|
|
- {$EndIf}
|
|
|
-begin
|
|
|
- {$If Defined(MSWINDOWS)}
|
|
|
- if not GetFileAttributesEx(PChar(aFileName), GetFileExInfoStandard, @info) then
|
|
|
- RaiseLastOSError;
|
|
|
- DosTime:=0;
|
|
|
- FileTimeToDosDateTime(info.ftCreationTime, LongRec(DosTime).Hi, LongRec(DosTime).Lo);
|
|
|
- CreateUTC:=FileDateToDateTime(DosTime);
|
|
|
- FileTimeToDosDateTime(info.ftLastWriteTime, LongRec(DosTime).Hi, LongRec(DosTime).Lo);
|
|
|
- WriteUTC :=FileDateToDateTime(DosTime);
|
|
|
- FileTimeToDosDateTime(info.ftLastAccessTime, LongRec(DosTime).Hi, LongRec(DosTime).Lo);
|
|
|
- AccessUTC:=FileDateToDateTime(DosTime);
|
|
|
- {$ElseIf Defined(UNIX)}
|
|
|
- Info:=Default(Stat);
|
|
|
- if fpstat(aFileName, info) <> 0 then
|
|
|
- raise EInOutError.CreateFmt(errStatFailed, [aFileName, fpgeterrno]);
|
|
|
- CreateUTC:=UnixToDateTime(info.st_ctime, True);
|
|
|
- WriteUTC :=UnixToDateTime(info.st_mtime, True);
|
|
|
- AccessUTC:=UnixToDateTime(info.st_atime, True);
|
|
|
- {$Else}
|
|
|
- if FileAge(aFilename, CreateUTC) then
|
|
|
- begin
|
|
|
- WriteUTC := CreateUTC;
|
|
|
- AccessUTC := CreateUTC;
|
|
|
- end
|
|
|
- else
|
|
|
- raise EInOutError.CreateFmt(SErrFileNotFound, [aFileName]);
|
|
|
- {$EndIf}
|
|
|
+class procedure TFile.GetFileTimestamps(const aFilename: TFileName; var aCreate, aWrite, aAccess: TDateTime; IsUTC: Boolean);
|
|
|
+
|
|
|
+var
|
|
|
+ DateTime: TDateTimeInfoRec;
|
|
|
+
|
|
|
+begin
|
|
|
+ if FileGetDateTimeInfo(aFileName,DateTime) then
|
|
|
+ begin
|
|
|
+ aCreate:=DateTime.CreationTime;
|
|
|
+ aWrite:=DateTime.TimeStamp;
|
|
|
+ aAccess:=DateTime.LastAccessTime;
|
|
|
+ if isUTC then
|
|
|
+ begin
|
|
|
+ aCreate:=LocalTimeToUniversal(aCreate);
|
|
|
+ aWrite:=LocalTimeToUniversal(aCreate);
|
|
|
+ aAccess:=LocalTimeToUniversal(aCreate);
|
|
|
+ end;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ raise EInOutError.CreateFmt(SErrFileNotFound, [aFileName]);
|
|
|
end;
|
|
|
|
|
|
class function TFile.IntegerToFileAttributes(const Attributes: Integer
|
|
@@ -1703,8 +1685,14 @@ begin
|
|
|
end;
|
|
|
|
|
|
class function TFile.GetCreationTime(const aPath: string): TDateTime;
|
|
|
+
|
|
|
+var
|
|
|
+ Dummy1, Dummy2: TDateTime;
|
|
|
begin
|
|
|
- Result:=UTCtoLocal(TFile.GetCreationTimeUtc(aPath));
|
|
|
+ Result:=MinDateTime;
|
|
|
+ Dummy1:=MinDateTime;
|
|
|
+ Dummy2:=MinDateTime;
|
|
|
+ GetFileTimestamps(aPath, Result, Dummy1, Dummy2, False);
|
|
|
end;
|
|
|
|
|
|
class function TFile.GetCreationTimeUtc(const aPath: string): TDateTime;
|
|
@@ -1714,12 +1702,17 @@ begin
|
|
|
Result:=MinDateTime;
|
|
|
Dummy1:=MinDateTime;
|
|
|
Dummy2:=MinDateTime;
|
|
|
- GetFileTimestamps(aPath, Result, Dummy1, Dummy2);
|
|
|
+ GetFileTimestamps(aPath, Result, Dummy1, Dummy2, True);
|
|
|
end;
|
|
|
|
|
|
class function TFile.GetLastAccessTime(const aPath: string): TDateTime;
|
|
|
+var
|
|
|
+ Dummy1, Dummy2: TDateTime;
|
|
|
begin
|
|
|
- Result:=UTCtoLocal(TFile.GetLastAccessTimeUtc(aPath));
|
|
|
+ Result:=MinDateTime;
|
|
|
+ Dummy1:=MinDateTime;
|
|
|
+ Dummy2:=MinDateTime;
|
|
|
+ GetFileTimestamps(aPath, Dummy1, Dummy2, Result, False);
|
|
|
end;
|
|
|
|
|
|
class function TFile.GetLastAccessTimeUtc(const aPath: string): TDateTime;
|
|
@@ -1729,12 +1722,17 @@ begin
|
|
|
Result:=MinDateTime;
|
|
|
Dummy1:=MinDateTime;
|
|
|
Dummy2:=MinDateTime;
|
|
|
- GetFileTimestamps(aPath, Dummy1, Dummy2, Result);
|
|
|
+ GetFileTimestamps(aPath, Dummy1, Dummy2, Result,True);
|
|
|
end;
|
|
|
|
|
|
class function TFile.GetLastWriteTime(const aPath: string): TDateTime;
|
|
|
+var
|
|
|
+ Dummy1, Dummy2: TDateTime;
|
|
|
begin
|
|
|
- Result:=UTCtoLocal(TFile.GetLastWriteTime(aPath));
|
|
|
+ Result:=MinDateTime;
|
|
|
+ Dummy1:=MinDateTime;
|
|
|
+ Dummy2:=MinDateTime;
|
|
|
+ GetFileTimestamps(aPath, Dummy1, Result, Dummy2, False);
|
|
|
end;
|
|
|
|
|
|
class function TFile.GetLastWriteTimeUtc(const aPath: string): TDateTime;
|
|
@@ -1744,7 +1742,7 @@ begin
|
|
|
Result:=MinDateTime;
|
|
|
Dummy1:=MinDateTime;
|
|
|
Dummy2:=MinDateTime;
|
|
|
- GetFileTimestamps(aPath, Dummy1, Result, Dummy2);
|
|
|
+ GetFileTimestamps(aPath, Dummy1, Result, Dummy2,True);
|
|
|
end;
|
|
|
|
|
|
class function TFile.GetSymLinkTarget(const aFileName: string;
|