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

Delphi Sources



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

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

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

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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
По умолчанию

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


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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