Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

GetFileTime() [D6, 2000]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо