unit Altere;
interface
uses Windows, SysUtils, Forms;
type
TFileTimes = (ftLastAccess, ftLastWrite, ftCreation);
function aDataDoArquivo(nome: String; data: TDateTime; Times: TFileTimes): Boolean;
implementation
function aDataDoArquivo(nome: String; data: TDateTime; Times: TFileTimes): Boolean;
var Handle: THandle;
FileTime: TFileTime;
SystemTime: TSystemTime;
begin
Result := False;
Handle := CreateFile(PChar(nome),
GENERIC_WRITE,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
0,
0);
if Handle <> INVALID_HANDLE_VALUE then
try
SysUtils.DateTimeToSystemTime(data, SystemTime);
if Windows.SystemTimeToFileTime(SystemTime, FileTime) then
begin
// verifiva o tipo de modificação a ser feita
case Times of
ftLastAccess: Result := SetFileTime(Handle, nil, @FileTime, nil);
ftLastWrite: Result := SetFileTime(Handle, nil, nil, @FileTime);
ftCreation: Result := SetFileTime(Handle, @FileTime, nil, nil);
end; // case
end; // if
finally
CloseHandle(Handle);
end; // finally
end;
end.
funciona, mas determina a hora de criação de um arquivo de maneira errada
se eu peço 10:05:10 ela grava 07:05:10
e nao faço ideia do porque desta redução de horas, alguem tem uma dica de como resolver isso ?
Bom, eu não sei a causa do problema, mas onde trabalho usamos a seguinte rotina para alterar a data e a hora de modificação do arquivo:
[code]function DefineDateTimeFile(FileName: string; DateTimeFile: TDateTime): boolean;
…
function DefineDateTimeFile;
var
F: integer;
begin
Result := false;
F := FileOpen( FileName, fmOpenWrite or fmShareDenyNone );
try
if F > 0 then
Result := FileSetDate( F, DateTimeToFileDate(DateTimeFile) ) = 0;
finally
FileClose(F);
end;
end;[/code]
{ muda a data de criação do arquivo }
function altereADataDeCriacaoDoArquivo(nome: String; data: TDateTime): Boolean;
var Handle: THandle;
FileTime: TFileTime;
SystemTime: TSystemTime;
begin
Result := False;
Handle := CreateFile(PChar(nome),
GENERIC_WRITE,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
0,
0);
if Handle <> INVALID_HANDLE_VALUE then
try
SysUtils.DateTimeToSystemTime(data, SystemTime);
if Windows.SystemTimeToFileTime(SystemTime, FileTime) then
Result := SetFileTime(Handle, @FileTime, nil, nil);
finally
CloseHandle(Handle);
end; // finally
end; // end of
3 - chamar a função da seguinte forma
{ modifica os atributos do arquivo selecionado }
procedure TForm1.Button1Click(Sender: TObject);
begin
altereADataDeCriacaoDoArquivo(path, IncHour(StrToDateTime('01/01/2000 10:30:35'), 3));
// processa msgs do SO
Application.ProcessMessages;
end; // end of