Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.03.2012, 00:42
Taemin Taemin вне форума
Прохожий
 
Регистрация: 07.02.2012
Сообщения: 45
Репутация: 10
По умолчанию Некорректная запись в файл

Цель программы – построчно фиксировать в текстовом файле время выполнения цикла Таймера… что программа успешно и делает, но каждая новое значение записывается поверх предыдущего… пытался добавлять символ возврата каретки #13#10, но ничего не помогло… мне необходимо значения складывать столбиком, подобие некого log-файла. Подскажите где что нужно поправить\дописать. Заранее спасибо.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdIPWatch, winsock,
  ExtCtrls;

type
  TForm1 = class(TForm)
    idpwtch1: TIdIPWatch;
    edt2: TEdit;
    lbl1: TLabel;
    tmr1: TTimer;
    lbl2: TLabel;
    btn1: TButton;
    btn2: TButton;
    lbl3: TLabel;
    lbl4: TLabel;
    lbl5: TLabel;
    lbl6: TLabel;
    lbl7: TLabel;
    lbl8: TLabel;
    lbl9: TLabel;
    edt1: TEdit;
    lbl10: TLabel;
    procedure tmr1Timer(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function HostToIP(name: string; var Ip: string): Boolean;
var
  wsdata : TWSAData;
  hostName : array [0..255] of char;
  hostEnt : PHostEnt;
  addr : PChar;
begin
  WSAStartup ($0101, wsdata);
  try
    gethostname (hostName, sizeof (hostName));
    StrPCopy(hostName, name);
    hostEnt := gethostbyname (hostName);
    if Assigned (hostEnt) then
      if Assigned (hostEnt^.h_addr_list) then begin
        addr := hostEnt^.h_addr_list^;
        if Assigned (addr) then begin
          IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
          Result := True;
        end
        else
          Result := False;
      end
      else
        Result := False
    else begin
      Result := False;
    end;
  finally
    WSACleanup;
  end
end;

procedure TForm1.tmr1Timer(Sender: TObject);
var
  IP: string;
  IPS: string;
  outfile: TextFile;
begin
  AssignFile(outfile, 'c:\outfile.txt');
  Rewrite(outfile);

  edt1.Text:=FormatDateTime('dd.mm.yy hh:mm:ss',Now());

  HostToIp(edt2.Text, IP);
  lbl1.Caption := IP;
  Sleep(10000);

  if lbl1.Caption = '' then
  begin
  lbl5.Visible:=False;
  lbl2.Visible:=True;

  writeln(outfile, edt1.Text + #13#10);
  CloseFile(outfile);

  end
  else
  begin
  lbl5.Visible:=True;
  lbl2.Visible:=False;
  end;

  HostToIp('google.com', IPS);
  lbl7.Caption := IPS;
  Sleep(10000);

  if lbl7.Caption = '' then
  begin
  lbl8.Visible:=False;
  lbl9.Visible:=True;
  end
  else
  begin
  lbl8.Visible:=True;
  lbl9.Visible:=False;
  end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
tmr1.Enabled:=True;
btn1.Visible:=False;
btn2.Visible:=True;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
tmr1.Enabled:=False;
btn1.Visible:=True;
btn2.Visible:=False;
lbl5.Visible:=False;
lbl2.Visible:=False;
lbl8.Visible:=False;
lbl9.Visible:=False;
end;

end.
Ответить с цитированием
  #2  
Старый 20.03.2012, 00:51
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Убрать Rewrite(outfile), написать Reset(outfile) (Rewrite, если файл отсутствует). Всё это сделать в FormCreate, в таймере только писать, в FormDestroy, закрыть файл.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 20.03.2012, 10:39
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

или, если хочется именно в таймере, то так
вместо
Код:
 Rewrite(outfile);
написать
Код:
 
{$I-} // выключить Exception при ошибках ввода-вывода
  Append(outfile); // открыть файл для дописывания
  if IoResult <>0 then // если не получилось
   Rewrite(outfile); // то создать новый файл
{$I+} // включить обратно Exception при ошибках ввода-вывода
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter