![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GetFileTime() [D6, 2000]
Officeman © (2006-02-19 14:14:00)Описание:
программа1, при onClickButton1 пересзаписывает файл 'go.bas'
программа2, должна читать 'go.bas' если он был "перезаписан".
не могу разобраться с GetFileTime(), подскжите плиз. запутался в типах.
rrr:=GetFileTime(????????);
if "файл go.bas перезаписан" then begin
if MF2.Checked=true then
begin
assignfile(f,'go.bas');
Reset(F);
Readln(F, sik);
if sik<>ent.Text then begin
ent.Text := sik;
end;
end;
end;
Officeman (2006-02-20 12:29:00) [1]я тупой баран.
в цикле обозначил переменные. конечно при каждом новом круге цикла переменные обнулялись.
идиот
Officeman (2006-02-20 11:48:00) [2]полный код непоместится. >34000 строк
Officeman (2006-02-20 11:41:00) [3]dt:=SystemTimeToDateTime(st);
какой тип "st"
и "dt"
???
Officeman (2006-02-20 11:34:00) [4]ok. сейчас попробую
GuAV (2006-02-20 11:32:00) [5]
> function FileTimeToDateTime(const FileTime:
>_FILETIME): TDATETIME;
>var LocalFileTime: TFileTime;
> Age : integer;
>begin
>FileTimeToLocalFileTime(FileTime,LocalFileTime);
> if FileTimeToDosDateTime(LocalFileTime,
>LongRec(Age).Hi,
> LongRec(Age).Lo) then
> begin
> Result := FileDateToDateTime(Age);
> Exit;
> end;
>Result := -1;
> end;
В приведенном варианте используется integer в процессе преобразования, поэтому может терятся точность.
Я бы порекомендовал таки вариант [0]:
FileTimeToLocalFileTime(crTime,usTime);
FileTimeToSystemTime(usTime,st);
dt:=SystemTimeToDateTime(st);
> Officeman (20.02.06 8:58) [21]
Приведи код полнее, чтобы ошибку можно было воспроизвести.
И зачем сравнивать строки, сравнивать имхо следует сами TFileTime.
Officeman (2006-02-20 09:45:00) [6]забыл сказать. данный код выполняется в цикле. т.е. ждём изменения файла.
Officeman (2006-02-20 08:58:00) [7]Вопрос.
if MF2.Checked=true then begin
//определяем время изменения и переводим в тип-строка.
try
Windows.FindClose(FindFirstFile('go.bas', FindData));
NewTim:=TimeToStr(FileTimeToDateTime(FindData.ftLastWriteTime));
finally
memo2.Lines.Add('NewTim: '+NewTim);
end;
//сравниваем новое и старое значение. ????????????????????? ***
if NewTim<>OldTim then begin
memo2.Lines.Add('OldTim: '+OldTim);
OldTim:=NewTim;
...
*** пример. в memo2 выводит так:
NewTim: 10:58:52
OldTim: 10:58:52
почему. они не сравниваются как СТРОКИ, проходят как НЕРАВНЫЕ. ???
хотя тип string
Officeman (2006-02-19 23:23:00) [8]родила царица в ночь.
не то сына, не то дочь.
не мышонка, не лягушку
а неведому зверюшку.
function FileTimeToDateTime(const FileTime: _FILETIME): TDATETIME;
var LocalFileTime: TFileTime;
Age : integer;
begin
FileTimeToLocalFileTime(FileTime,LocalFileTime);
if FileTimeToDosDateTime(LocalFileTime, LongRec(Age).Hi,
LongRec(Age).Lo) then
begin
Result := FileDateToDateTime(Age);
Exit;
end;
Result := -1;
end;
procedure TForm1.Panel115Click(Sender: TObject);
var
Result:integer;
OldFileTime: TFileTime;
FindData: TWin32FindData;
rrr:string;
begin
Windows.FindClose(FindFirstFile('go.bas', FindData));
if Int64(FindData.ftLastWriteTime) < Int64(OldFileTime) then begin
form1.Caption:='1';
end else begin
form1.Caption:='';
end;
memo2.Lines.Add(TimeToStr(FileTimeToDateTime(FindData.ftLastWriteTime)));
end;
спасибо за помощь.
Desdechado (2006-02-19 22:40:00) [9]а мы думали, что ты уже решил
все тебе популярно рассказали, даже справку показали и разжевали, что в ней
Officeman (2006-02-19 22:35:00) [10]=) а по проще никак нельзя решить моё ТЗ ?
Desdechado (2006-02-19 20:49:00) [11]господа, не вижу смысла спорить
для любой метрики есть точка отсчета
при этом от любой точки до точки отсчета - это интервал, но сама эта "любая точка" - это точка, хоть и называется "лежащая на расстоянии Х от точки отсчета"
сами путаетесь и новичков за собой тащите
GuAV (2006-02-19 20:15:00) [12]Джо © (19.02.06 20:11) [14]
>> [13] Desdechado © (19.02.06 19:51)
>> 10 апреля 2005 - это дата,
>
> Да, но она выражена в виде интервала. :)
+1
GuAV (2006-02-19 20:14:00) [13]
> Дата - это точка на временной оси.
> Интервал - это расстояние между 2 точками на той оси.
Да.
Но в данном случае речь идёт именно о дате, а то что она задаётся как интервал между задаваемой и January 1, 1601 - это только способ задания.
Например TDateTime может содержать и интервал и дату, при в последнем случае дата представлена как интервал между 12/30/1899 и указываемой.
Джо (2006-02-19 20:11:00) [14]> [13] Desdechado © (19.02.06 19:51)
> 10 апреля 2005 - это дата,
Да, но она выражена в виде интервала. :)
Desdechado (2006-02-19 19:51:00) [15]> Дата, но представлена ввиде интервала
Не надо путать. Дата - это точка на временной оси. Интервал - это расстояние между 2 точками на той оси.
10 апреля 2005 - это дата, 10 апрелей - это интервал
сходство названий не должно перерастать в отождествление
GuAV (2006-02-19 19:33:00) [16]Desdechado © (19.02.06 19:12) [10]
> т.е. это НЕ ДАТА, а интервал
Дата, но представлена ввиде интервала между задаваемой и фиксированой датой. Значение TDateTime тоже интервал между задаваемой и фиксированой датой.
А как иначе ?
Перевод FILETIME в TDateTime
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1139995337&n=5
Desdechado (2006-02-19 19:14:00) [17]поэтому конструкция TimeToStr(Tdatetime(FindData.ftLastWriteTime)) - бред полнейший
Desdechado (2006-02-19 19:12:00) [18]ты справку читать будешь или нет?
ЕЩЕ РАЗ:
The FILETIME structure is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601.
т.е. это НЕ ДАТА, а интервал
Officeman (2006-02-19 18:57:00) [19]Братья по разуму! Кито знает?? (см.выше)
----------------------------
p.s. бородатый анекдот
нач.прогер спрашивает у крутого.прогера.
нач.прогер: скажите, что я неправильно пишу. где искать ошибку?
крутой прогер: ошибка в твоём днк.
Officeman (2006-02-19 18:14:00) [20]Невыводится ничего, кроме 00:00:00
procedure TForm1.Panel115Click(Sender: TObject);
var
Result:integer;
OldFileTime: TFileTime;
FindData: TWin32FindData;
begin
Windows.FindClose(FindFirstFile('c:\go.bas', FindData));
if Int64(FindData.ftLastWriteTime) < Int64(OldFileTime) then begin
form1.Caption:='1';
end else begin
form1.Caption:='';
end;
memo2.Lines.Add('1. '+TimeToStr(Tdatetime(FindData.ftLastWriteTime)));
memo2.Lines.Add('2. '+TimeToStr(Tdatetime(OldFileTime)));
end;