Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];

Вниз

формат 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
1-29882
NightPrivat
2003-02-26 08:16
2003.03.10
Как связать дельфу и WinRar


1-29901
Makhanev A.S.
2003-02-26 05:50
2003.03.10
Access violation в приведённом ниже коде. В чём ошибка?


14-30106
konstantinov
2003-02-22 16:25
2003.03.10
SOS! Проблема с модулем SDRAM 128Mb.


1-29789
Smirnoff
2003-02-26 12:47
2003.03.10
Как сделать прогу, чтобы она запускалась в винде как сервис?


14-30123
SuperMagic
2003-02-23 12:28
2003.03.10
Пакеты разработки в Делфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский