Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.10;
Скачать: CL | DM;

Вниз

формат setfiletime   Найти похожие ветки 

 
Arhangel ©   (2003-02-26 15:28) [0]

Кто подскажет как перевести дату в формате TDateTime в формат PTimeFile, чтобы можно было использовать в функции setfiletime?


 
Smashich ©   (2003-02-26 15:30) [1]

The SystemTimeToFileTime function converts a system time to a file time.


 
Arhangel ©   (2003-02-26 15:35) [2]

Thanks to you very much!


 
han_malign ©   (2003-02-26 15:48) [3]

function dt2ft(const aDateTime: TDateTime): TFileTime;
begin
int64(Result):=$014F35A9A90CC000+int64(10000)*Round(aDateTime*24*60*60);
end;


 
Arhangel ©   (2003-02-26 16:03) [4]

Немного не то что надо, т.к. у функции dt2ft возвращает в формате Tfiletime, а функция setfiletime требует формат PTimeFile.
Как быть?


 
Smashich ©   (2003-02-26 16:04) [5]

type
PTimeFile = ^TFileTime


 
han_malign ©   (2003-02-26 16:19) [6]

var ft: TFileTime;
begin
............
ft:=dt2ft(Now);
SetFileTime(FileName,@ft,nil,nil);


 
Arhangel ©   (2003-02-26 16:39) [7]

Все сделал как написал han_malign, программа запускается вроде что-то делает, но дата не миняется, в чем может быть дело?
Вот мой код:
var
f,i:integer;
s:string;
ft: TFileTime;
begin
..............
s:=("С:\КОНТРА.lnk");
f:=fileopen(s,fmopenwrite);
ft:=dt2ft(Now);
SetFileTime(f,@ft,nil,nil);
fileclose(f);
end;


 
han_malign ©   (2003-02-26 16:56) [8]

1. Какую дату(Creatin/LastAccess/LastWriteTime) надо изменить и на что?
2. Открывается ли файл?
3. Есть такак штука GetLastError...
var
f,i:integer;
s:string;
ft: TFileTime;
begin
..............
s:=("С:\КОНТРА.lnk");
f:=fileopen(s,fmopenwrite);
if(f<>-1)then begin
ft:=dt2ft(Now);
if not SetFileTime(f,@ft,nil,nil) then ShowMessage("SetFileTime: "+IntToStr(GetLastError));
fileclose(f);
end else ShowMessage("FileOpen: "+IntToStr(GetLastError));
end;


 
Arhangel ©   (2003-02-26 17:05) [9]

Дата Creatin, а спомощью функции fileopen(s,fmopenwrite) я просто получаю дискриптор файла, потом я его закрываю, больше с файлом ни чего не происходит.


 
han_malign ©   (2003-02-26 17:15) [10]

я просто получаю дискриптор файла
- а ты его получаешь??? Кто ошибки обрабатывать будет - Борланд?


 
Arhangel ©   (2003-02-26 17:21) [11]

Я проверял в пошаговом режиме, в переменную заносится число отличное от нуля, в моем случае 84.


 
Arhangel ©   (2003-02-26 17:38) [12]

Я понять не могу почему она не работает:(. Вроде в виндах98 должна работать, однако ни чего не меняется.
Может кто у себя попробует на 98? Чтобы убедится что это только у меня не работает:). Или подскажите тогда какой-нить другой способ.

З.Ы. Всем спасибо за ответы.


 
Arhangel ©   (2003-02-26 17:44) [13]

Вот что выдает сообщение:
SetFileTime:13
FileOpen:0
Это по поводу последних ошибок.


 
han_malign ©   (2003-02-26 17:59) [14]

у меня все работает(Win98SE):
program ft;
{$APPTYPE CONSOLE}
uses Windows;
var st: TSystemTime;
_ft: TFileTime;
h: THandle;
begin
GetLocalTime(st);
SystemTimeToFileTime(st,_ft);
h:=CreateFile(PChar(ParamStr(1)),GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);
if(h<>INVALID_HANDLE_VALUE)then begin
if(not SetFileTime(h,@_ft,nil,nil))then Writeln("SetFileTime: ",GetLastError);
end else Writeln("Open: ",GetLastError);
end.


 
han_malign ©   (2003-02-26 18:02) [15]

извиняюсь CloseHandle(h) забыл, но это дела не меняет.
З.Ы. Во всех файл-менеджерах по умолчанию показывается LastWriteTime (Modification time), может не там смотришь?


 
Arhangel ©   (2003-02-26 18:14) [16]

О, да тут уже ответили:).
Я написал так:
var
f,i:integer;
s:string;
ft: TFileTime;
st:systemtime;
begin
..............
s:=("С:\КОНТРА.lnk");
f:=fileopen(s,fmopenwrite);
GetSystemTime(st);
SystemTimeToFileTime(st,ft);
SetFileTime(f,@ft,nil,nil);
fileclose(f);
end;

И у меня все заработало!:), кстати без функции dt2ft. Всем спасибо:) Особенно han_malign:).


 
han_malign ©   (2003-02-26 18:23) [17]

блин, опять неправильно скопировал:
function dt2ft(const aDateTime: TDateTime): TFileTime;
begin
int64(Result):=$014F35A9A90CC000+int64(10000)*Round(aDateTime*24*60*60 *1000);
end;
- кривую дату выдавало, потому и ругалось (ERROR_INVALID_PARAMETER)


 
Arhangel ©   (2003-02-26 18:30) [18]

Вот хотел у тебя спросить почему ты написал именно так, но не спросил, а надо было:)



Страницы: 1 вся ветка

Текущий архив: 2003.03.10;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
3-29715
Max_9999
2003-02-18 14:26
2003.03.10
ClientDataSet и Paradox


8-29965
STANT
2002-11-27 17:22
2003.03.10
DirectX


1-29911
Tihas
2003-02-26 23:38
2003.03.10
Вопросик по поводу TWINControl


7-30152
Ich Hasse
2003-01-11 23:32
2003.03.10
Привязка программы


3-29756
jen_bond
2003-02-19 16:02
2003.03.10
DBctrlGrid