mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
UPD: Use TFileTimeEx type
This commit is contained in:
parent
80d4477cc0
commit
dde35d68dd
5 changed files with 29 additions and 61 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue