UPD: Use TFileTimeEx type

This commit is contained in:
Alexander Koblov 2024-06-12 14:23:15 +03:00
commit dde35d68dd
5 changed files with 29 additions and 61 deletions

View file

@ -199,7 +199,7 @@ begin
if (aTemplateProperty as TFileModificationDateTimeProperty).Value <>
(aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value then
begin
if not FileSetTimeExUAC(
if not FileSetTimeUAC(
aFile.FullPath,
DateTimeToFileTimeEx((aTemplateProperty as TFileModificationDateTimeProperty).Value),
TFileTimeExNull,
@ -215,7 +215,7 @@ begin
if (aTemplateProperty as TFileCreationDateTimeProperty).Value <>
(aFile.Properties[fpCreationTime] as TFileCreationDateTimeProperty).Value then
begin
if not FileSetTimeExUAC(
if not FileSetTimeUAC(
aFile.FullPath,
TFileTimeExNull,
DateTimeToFileTimeEx((aTemplateProperty as TFileCreationDateTimeProperty).Value),
@ -231,7 +231,7 @@ begin
if (aTemplateProperty as TFileLastAccessDateTimeProperty).Value <>
(aFile.Properties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value then
begin
if not FileSetTimeExUAC(
if not FileSetTimeUAC(
aFile.FullPath,
TFileTimeExNull,
TFileTimeExNull,

View file

@ -960,7 +960,7 @@ procedure TFileSystemOperationHelper.CopyProperties(SourceFile: TFile;
var
Msg: String = '';
ACopyTime: Boolean;
CreationTime, LastAccessTime: TFileTime;
CreationTime, LastAccessTime: TFileTimeEx;
CopyAttrResult: TCopyAttributesOptions = [];
ACopyAttributesOptions: TCopyAttributesOptions;
begin
@ -978,18 +978,18 @@ begin
if not (caoCopyTimeEx in CopyAttributesOptionEx) then
begin
if fpCreationTime in SourceFile.AssignedProperties then
CreationTime:= DateTimeToFileTime(SourceFile.CreationTime)
CreationTime:= DateTimeToFileTimeEx(SourceFile.CreationTime)
else begin
CreationTime:= 0;
CreationTime:= TFileTimeExNull;
end;
LastAccessTime:= DateTimeToFileTime(SourceFile.LastAccessTime);
LastAccessTime:= DateTimeToFileTimeEx(SourceFile.LastAccessTime);
end
else begin
CreationTime:= 0;
LastAccessTime:= 0;
CreationTime:= TFileTimeExNull;
LastAccessTime:= TFileTimeExNull;
end;
// Copy time from properties because move operation change time of original folder
if not FileSetTimeUAC(TargetFileName, DateTimeToFileTime(SourceFile.ModificationTime),
if not FileSetTimeUAC(TargetFileName, DateTimeToFileTimeEx(SourceFile.ModificationTime),
CreationTime, LastAccessTime) then
CopyAttrResult += [caoCopyTime];
except

View file

@ -13,14 +13,8 @@ function FileExistsUAC(const FileName: String): Boolean;
function FileGetAttrUAC(const FileName: String; FollowLink: Boolean = False): TFileAttrs;
function FileGetAttrUAC(const FileName: String; out Attr: TFileAttributeData): Boolean;
function FileSetAttrUAC(const FileName: String; Attr: TFileAttrs): Boolean;
function FileSetTimeUAC(const FileName: String;
ModificationTime: DCBasicTypes.TFileTime;
CreationTime : DCBasicTypes.TFileTime = 0;
LastAccessTime : DCBasicTypes.TFileTime = 0): LongBool;
function FileSetTimeExUAC(const FileName: String;
ModificationTime: DCBasicTypes.TFileTimeEx;
CreationTime : DCBasicTypes.TFileTimeEx;
LastAccessTime : DCBasicTypes.TFileTimeEx): LongBool;
function FileSetTimeUAC(const FileName: String; ModificationTime: TFileTimeEx;
CreationTime: TFileTimeEx; LastAccessTime: TFileTimeEx): LongBool;
function FileSetReadOnlyUAC(const FileName: String; ReadOnly: Boolean): Boolean;
function FileCopyAttrUAC(const sSrc, sDst: String;
Options: TCopyAttributesOptions): TCopyAttributesOptions;
@ -182,27 +176,9 @@ begin
end;
function FileSetTimeUAC(const FileName: String;
ModificationTime: DCBasicTypes.TFileTime;
CreationTime : DCBasicTypes.TFileTime;
LastAccessTime : DCBasicTypes.TFileTime): LongBool;
var
LastError: Integer;
begin
Result:= mbFileSetTime(FileName, ModificationTime, CreationTime, LastAccessTime);
if (not Result) and ElevationRequired then
begin
LastError:= GetLastOSError;
if RequestElevation(rsElevationRequiredSetAttributes, FileName) then
Result:= TWorkerProxy.Instance.FileSetTime(FileName, ModificationTime, CreationTime, LastAccessTime)
else
SetLastOSError(LastError);
end;
end;
function FileSetTimeExUAC(const FileName: String;
ModificationTime: DCBasicTypes.TFileTimeEx;
CreationTime : DCBasicTypes.TFileTimeEx;
LastAccessTime : DCBasicTypes.TFileTimeEx): LongBool;
ModificationTime: DCBasicTypes.TFileTimeEx;
CreationTime : DCBasicTypes.TFileTimeEx;
LastAccessTime : DCBasicTypes.TFileTimeEx): LongBool;
var
LastError: Integer;
begin
@ -211,11 +187,7 @@ begin
begin
LastError:= GetLastOSError;
if RequestElevation(rsElevationRequiredSetAttributes, FileName) then
{$IFDEF MSWINDOWS}
Result:= TWorkerProxy.Instance.FileSetTime(FileName, ModificationTime, CreationTime, LastAccessTime)
{$ELSE}
Result:= TWorkerProxy.Instance.FileSetTime(FileName, ModificationTime.sec, CreationTime.sec, LastAccessTime.sec)
{$ENDIF}
else
SetLastOSError(LastError);
end;

View file

@ -39,10 +39,8 @@ type
function FileGetAttr(const FileName: String; FollowLink: LongBool): TFileAttrs; inline;
function FileGetAttr(const FileName: String; out Attr: TFileAttributeData): LongBool;
function FileSetAttr(const FileName: String; Attr: TFileAttrs): LongBool; inline;
function FileSetTime(const FileName: String;
ModificationTime: DCBasicTypes.TFileTime;
CreationTime : DCBasicTypes.TFileTime;
LastAccessTime : DCBasicTypes.TFileTime): LongBool;
function FileSetTime(const FileName: String; ModificationTime: TFileTimeEx;
CreationTime: TFileTimeEx; LastAccessTime: TFileTimeEx): LongBool;
function FileSetReadOnly(const FileName: String; ReadOnly: Boolean): LongBool; inline;
function FileCopyAttr(const sSrc, sDst: String;
Options: TCopyAttributesOptions): TCopyAttributesOptions;
@ -403,10 +401,8 @@ begin
Result:= ProcessObject(RPC_FileSetAttr, FileName, Attr);
end;
function TWorkerProxy.FileSetTime(const FileName: String;
ModificationTime: DCBasicTypes.TFileTime;
CreationTime: DCBasicTypes.TFileTime; LastAccessTime: DCBasicTypes.TFileTime
): LongBool;
function TWorkerProxy.FileSetTime(const FileName: String; ModificationTime: TFileTimeEx;
CreationTime: TFileTimeEx; LastAccessTime: TFileTimeEx): LongBool;
var
LastError: Integer;
Stream: TMemoryStream;
@ -420,9 +416,9 @@ begin
Stream.Seek(SizeOf(UInt32), soFromCurrent);
// Write arguments
Stream.WriteAnsiString(FileName);
Stream.WriteQWord(ModificationTime);
Stream.WriteQWord(CreationTime);
Stream.WriteQWord(LastAccessTime);
Stream.WriteBuffer(ModificationTime, SizeOf(TFileTimeEx));
Stream.WriteBuffer(CreationTime, SizeOf(TFileTimeEx));
Stream.WriteBuffer(LastAccessTime, SizeOf(TFileTimeEx));
// Write data size
Stream.Seek(SizeOf(UInt32), soFromBeginning);
Stream.WriteDWord(Stream.Size - SizeOf(UInt32) * 2);

View file

@ -122,9 +122,9 @@ var
LastError: Integer;
Data: TMemoryStream;
SearchRec: PSearchRecEx;
CreationTime: TFileTime;
LastAccessTime: TFileTime;
ModificationTime: TFileTime;
CreationTime: TFileTimeEx;
LastAccessTime: TFileTimeEx;
ModificationTime: TFileTimeEx;
FileAttr: TFileAttributeData;
procedure WriteSearchRec(Data: TMemoryStream; SearchRec: PSearchRecEx);
@ -188,11 +188,11 @@ begin
RPC_FileSetTime:
begin
FileName:= ARequest.ReadAnsiString;
ModificationTime:= ARequest.ReadQWord;
CreationTime:= ARequest.ReadQWord;
LastAccessTime:= ARequest.ReadQWord;
ARequest.ReadBuffer(ModificationTime, SizeOf(TFileTimeEx));
ARequest.ReadBuffer(CreationTime, SizeOf(TFileTimeEx));
ARequest.ReadBuffer(LastAccessTime, SizeOf(TFileTimeEx));
DCDebug('FileSetTime ', FileName);
Result:= mbFileSetTime(FileName, ModificationTime, CreationTime, LastAccessTime);
Result:= mbFileSetTimeEx(FileName, ModificationTime, CreationTime, LastAccessTime);
LastError:= GetLastOSError;
ATransport.WriteBuffer(Result, SizeOf(Result));
ATransport.WriteBuffer(LastError, SizeOf(LastError));