Форум по 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);

Вот небольшой фрагмент текста кода:
Код:
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, время: 08:01.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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