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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.12.2009, 22:16
vigard373 vigard373 вне форума
Прохожий
 
Регистрация: 23.12.2009
Адрес: Петербург
Сообщения: 12
Репутация: 10
По умолчанию Почему не запоминается значение переменной?

После запуска программы есть окно с полем Memo и 2-е кнопки. Изначально текстовые данные берутся из файла №1 и помещаются в поле Memo, 1 кнопка читает по строкам содержимое файла №1, а 2-я соответственно из файла №2 и замещает предыдущие данные в поле Memo новыми. Чтобы на лету можно было сохранять изменённые данные в Memo я добавил функцию сохранения в файлы по каждому нажатию на кнопки.

Но проблема в том, что первом же нажатии выскакивает ошибка "I/O Error 105" в коде строки: Rewrite(f);

Вот небольшой фрагмент текста кода:
Код:
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
142
143
144
145
146
147
148
149
150
151
152
153
unit MySecondProject;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ComCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
 
var
   f: TextFile;
   fName: String[80]
   buf: String[80];
   i: Integer;
   zzz: String[20];
 
begin
       AssignFile(f, zzz);   //  - Почему переменная zzz не запомнила значения
       Rewrite(f);   //  Вот здесь выскакивает ошибка
       for i:=0 to Memo1.Lines.Count-1 do
          writeln(f, Memo1.Lines[i]);
       CloseFile(f);
 
 
     AssignFile(f, 'test\1.txt');
   {$I-}
   Reset(f);
   {$I+}
   if IOResult <> 0 then
     begin
       MessageDlg('Ошибка доступа к файлу ' + fName,
                   mtError,[mbOk],0);
       exit;
     end;
 
   Memo1.Text:= '';
   while not EOF(f) do
     begin
        readln(f, buf);
        Memo1.Lines.Add(buf);
     end;
    Memo1.Lines.Add(zzz);
   CloseFile(f); // закрыть файл
 
   zzz := 'test\1.txt';
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
 
var
   f: TextFile;
   fName: String[80]
   buf: String[80];
   i: Integer;
   zzz: String[20];
 
begin
       AssignFile(f, zzz);
       Rewrite(f);
       for i:=0 to Memo1.Lines.Count-1 do
          writeln(f, Memo1.Lines[i]);
       CloseFile(f);
 
 
     AssignFile(f, 'test\1.txt');
   {$I-}
   Reset(f);
   {$I+}
   if IOResult <> 0 then
     begin
       MessageDlg('Ошибка доступа к файлу ' + fName,
                   mtError,[mbOk],0);
       exit;
     end;
 
   Memo1.Text:= '';
   while not EOF(f) do
     begin
        readln(f, buf);
        Memo1.Lines.Add(buf);
     end;
    Memo1.Lines.Add(zzz);
   CloseFile(f); // закрыть файл
 
   zzz := 'test\2.txt';
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
 
var
   f: TextFile;
   fName: String[80];
   buf: String[80];
   zzz: String[20];
 
   begin
   fName:= 'test\1.txt';
   AssignFile(f, fName);
 
   {$I-}
   Reset(f);
   {$I+}
   if IOResult <> 0 then
     begin
       MessageDlg('Ошибка доступа к файлу ' + fName,
                   mtError,[mbOk],0);
       exit;
     end;
 
   // чтение из файла
      memo1.Text:= '';
   while not EOF(f) do
     begin
        readln(f, buf);
        Memo1.Lines.Add(buf);
     end;
 
   CloseFile(f);
    
   zzz := 'test\1.txt';
   end;
end.
Admin: Пользуемся тегами!

Помогите разобраться новичку.

Последний раз редактировалось Admin, 23.12.2009 в 22:21.
Ответить с цитированием
  #2  
Старый 23.12.2009, 22:22
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

У вас zzz прописана как локальная переменная, причем для каждой процедуры своя, а вам ее надо прописать, как глобальную. Пропишите ее в раздел private для TForm1, а из FormCreate, Button2Click и Button1Click уберите ее описание.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 23.12.2009 в 22:27.
Ответить с цитированием
  #3  
Старый 23.12.2009, 22:32
vigard373 vigard373 вне форума
Прохожий
 
Регистрация: 23.12.2009
Адрес: Петербург
Сообщения: 12
Репутация: 10
По умолчанию

Ооо-Ё! Так просто. Спасибо! Заработало как надо.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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