![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись/чтение текущего времени в файл
jumpingjack © (2005-08-04 12:41:00)Здравствуйте, помогите. плз! Никак не могу понять в чем может быть проблема. Записываю время в файл. Затем считываю его оттуда, получается примерно такое: 164.172.136, 00:50:255.. подскажите в чем ошибка?
Данные в файл записываю следующим образом:
procedure TForm1.Button3Click(Sender: PObj);
var
PackNow : TDateTime;
Package : string;
OutFile : File;
PackLen : Integer;
begin
// Узнаем время
PackNow := Now;
// Формируем Package
Package := chr(str2int(Date2StrFmt('dd', PackNow)));
Package := Package + chr(str2int(Date2StrFmt('MM', PackNow)));
Package := Package + chr(str2int(Date2StrFmt('yy', PackNow)));
Package := Package + chr(str2int(Time2StrFmt('hh', PackNow)));
Package := Package + chr(str2int(Time2StrFmt('mm', PackNow)));
Package := Package + chr(str2int(Time2StrFmt('ss', PackNow)));
PackLen := Length(Package);
AssignFile(OutFile, Edit1.Text);
if FileExists(Edit1.Text) then
begin
// Если файл существует, открываем и ищем конец файла
Reset(OutFile, 1);
while not eof(OutFile) do BlockRead(OutFile, j, 1);
end
else Rewrite(OutFile, 1);
BlockWrite(OutFile, PackLen, 2); // Записываем длину последующей записи
BlockWrite(OutFile, Package, Length(Package)); // Записываем Package
CloseFile(OutFile);
end;
Читаю так:
procedure TForm1.Button2Click(Sender: PObj);
var
F : File;
Package : array [0..MaxN] of char;
TimeStr : String;
BSize : Integer;
begin
AssignFile(F, Edit1.Text);
Reset(F, 1);
ComboBox1.Clear;
while not EOF(F) do
begin
Package := '';
BlockRead(F, BSize, 2); // Узнаем размер последующей записи
BlockRead(F, Package, BSize); // Читаем запись
TimeStr := '';
if Length(int2str(Ord(Package[0]))) < 2 then TimeStr := '0';
TimeStr := TimeStr + int2str(Ord(Package[0])) + '.';
if Length(int2str(Ord(Package[1]))) < 2 then TimeStr := TimeStr + '0';
TimeStr := TimeStr + int2str(Ord(Package[1])) + '.';
if Length(int2str(Ord(Package[2]))) < 2 then TimeStr := TimeStr + '0';
TimeStr := TimeStr + int2str(Ord(Package[2])) + ', ';
if Length(int2str(Ord(Package[3]))) < 2 then TimeStr := TimeStr + '0';
TimeStr := TimeStr + int2str(Ord(Package[3])) + ':';
if Length(int2str(Ord(Package[4]))) < 2 then TimeStr := TimeStr + '0';
TimeStr := TimeStr + int2str(Ord(Package[4])) + ':';
if Length(int2str(Ord(Package[5]))) < 2 then TimeStr := TimeStr + '0';
TimeStr := TimeStr + int2str(Ord(Package[5]));
ComboBox1.Add(TimeStr);
end;
CloseFile(F);
end;
Anatoly Podgoretsky (2005-08-06 15:33:00) [1]Зачем вставляешь месяц во временную часть.
Дни 10..31 тебя явно не интерусуют.
В общем куча ошибок.
Зачем делаешь такую кучу операций, когда все делается с помощью одного вызова
Package := FormatDateTime('ddMMyyhhnnss', Now);
jumpingjack (2005-08-05 20:18:00) [2]Проблема была в том, что я записывал строки большие чем 250 символов в файл через blockwrite. Я вообще отказался от строк и записываю время через переменные byte - теперь все работает :)
pRibambAs (2005-08-05 12:29:00) [3]Если так хочется писать дату в бинарном виде, то уж лучше использовать TDateTime. Правда, запись будет занимать в файле на два байта больше, чем в твоем нынешнем коде. Но геморроя куда меньше: TDateTime легко конвертится во что хочешь.
jumpingjack (2005-08-04 13:44:00) [4]Насколько я понял тут проблема в форматах чтения/записи в BlockRead\BlockWrite.. т.к., когда я работал с текстовым файлом - все было хорошо с Date2StrFmt!
Thaddy (2005-08-04 13:08:00) [5]This code is shit, that's the problem ;)
Use Date2strFmt and Time2strFmt to encode as string, toghether with *str2DateTimeFmt* to decode to date.
See the good! documentation inside KOL.PAS.
Also you could usethe systemtime things instead.