Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проблема с сохранением в файл


Страницы:   1 2 3

fen ©   (2009-12-26 12:09:00) 

всем привет, подскажите:

мне нужно сохранить в файл и чтобы если такой файл есть, то он в него дописывал, но если я пишу


fname:='save\'+save+'.txt';
 AssignFile(fil,fname);
 Append(fil);
 Writeln(fil,'Результаты игрока  '+save);
 Writeln(fil,'Дата и время сохранения : '+FrmTetr.Label10.Caption);
 Writeln(fil,'Число очков:  '+FrmTetr.lBall.Caption);
 Writeln(fil,'');
 CloseFile(fil);

то если файл не создан, то пишет ошибку, а если пишу Rewrite(fil)то не дописывает в него


Anatoly Podgoretsky   (2009-12-26 19:57:00) [21]

> sniknik  (26.12.2009 19:54:21)  [21]

А нафиг делать глобализацию, лучше по месту с try finally end
И не надо постоянно файл держать открытым. Может пользователь захочет его в этот период почистить, удалить, переименовать. А тут такой облом.


sniknik   (2009-12-26 19:54:00) [22]

и че ж вам нормально то не пишется? все какие то извращения, чего выгадать пытаешься?

ну открой ты файл при старте например в initialization модуля, закрой в finalization, или в онопен/онклозе, т.е. открыть безусловно и закрывать также, а все остальные художества убери.

или раз уж так хочется со своим дурацким условием то проверяй не клик (чего ты с него вообще хотел?) а файловый хендл на "открытость", т.е. if TTextRec(fil).Handle <> 0 then ...
только смотри чтобы fil не дай Гейтс не был локальной переменной (почему? а читайте детские книжки типа "веселый программист").


fen   (2009-12-26 19:30:00) [23]


> sniknik ©

напиши плиз как это можно реализовать


sniknik   (2009-12-26 19:26:00) [24]

почему нельзя? можно (можно вообще все! кроме того, что нельзя...), но исключения должны делаться только если хорошо усвоил основные принципы...


fen   (2009-12-26 19:09:00) [25]

ок, значит нельзя никак сделать [16]? так и надо сказать


sniknik   (2009-12-26 18:51:00) [26]

> мда, отличное решение, большое спасибо,
без сарказма в [11], это очень хорошее, правильное решение. совмещать открытие и закрытие файла в одном месте (процедуре).  не побоюсь даже дополнить, делать это только с помощью try finally, чтобы гарантированно закрывать открытое (так же как гарантированно освобождать затребованную память, и т.д. бережно в общем к ресурсам относится)

> и как же я сам до такого не додумался??....
дурак наверное... и книжек не читал.

> и вобще ничего местами не меняя
в сказки веришь? ну тогда ничего не меняя скажи вслух "трах тибедох!" и вырви волос. ... помогло?


fen   (2009-12-26 18:20:00) [27]

мда, отличное решение, большое спасибо, и как же я сам до такого не додумался??....
прочитайте мое [4] сообщение, мне нужно сделать как там, не применяя [11], и вобще ничего местами не меняя

какое условие нужно использовать здесь
if SpeedButton2.Clickthen
begin
  Writeln(fil,'Число очков:  '+FrmTetr.lBall.Caption);
  Writeln(fil,'');
  CloseFile(fil);
  end
  else
  ...
end;

чтобы программа всегда работала??


Плохиш   (2009-12-26 18:07:00) [28]


> fen   (26.12.09 14:44) [13]
>
> ну а так как я спросил в 4 можно как то сделать?

goto [11]

> fen1   (26.12.09 15:28) [14]
>
> а по [4] пункту?

goto [12]


fen1   (2009-12-26 15:28:00) [29]

а по [4] пункту?


fen   (2009-12-26 14:44:00) [30]

ну а так как я спросил в 4 можно как то сделать?


Anatoly Podgoretsky   (2009-12-26 14:37:00) [31]

Но вообще то весь код пригоден для корзины.


Anatoly Podgoretsky   (2009-12-26 14:35:00) [32]

Вот это другое дело, тут уже появилось открытие файла. Проблема решается элементарнейши, добавить открытие файла в процедуру Close и закрытие файла в метод SpeedButton2Click и все. Также не ясно, что делает в процедуре закрытия  f:file of BestRec;


fen   (2009-12-26 14:11:00) [33]


procedure TFrmTetr.SpeedButton2Click(Sender: TObject);
begin
 save:=InputBox('Новая игра','Введите свое имя','Anonimous');
 fname:='save\'+save+'.txt';
 AssignFile(fil,fname);
 if not fileexists(fname) then
 rewrite(fil)
 else Append(fil);
 Writeln(fil,'Результаты игрока  '+save);
 Writeln(fil,'Дата и время сохранения : '+FrmTetr.Label10.Caption);
end;

procedure TFrmTetr.FormClose(Sender: TObject; var Action: TCloseAction);
var i:integer;
 f:file of BestRec;
begin
 Writeln(fil,'Число очков:  '+FrmTetr.lBall.Caption);
 Writeln(fil,'');
 CloseFile(fil);
end;



вот 2 процедуры, если я не нажав на SpeedButton2 выхожу из программы, выскакивает ошибка, вопрос: как ее избежать


Anatoly Podgoretsky   (2009-12-26 13:55:00) [34]

> fen  (26.12.2009 13:49:08)  [8]

Для по существу недостаточно информации, ее почти совсем нет.


fen   (2009-12-26 13:49:00) [35]

ответь мне по существу лучше, вопрос [4]


Anatoly Podgoretsky   (2009-12-26 13:39:00) [36]

> fen  (26.12.2009 13:20:06)  [6]

Тебе это только кажется.


fen   (2009-12-26 13:20:00) [37]

как же? происходит открытие файла для записи в него..


Anatoly Podgoretsky   (2009-12-26 13:17:00) [38]

> fen  (26.12.2009 13:06:04)  [4]

при нажатии на SpeedButton2 никакой файл не открывается


fen   (2009-12-26 13:06:00) [39]

вот еще такой вопрос:
у меня при нажатии на SpeedButton2 открывается файл AssigneFile, а его закрытие происходит при выходе из программы и туда пишется информация, но если я на эту кнопку не нажимаю, то выскакивает ошибка, о том что я пытаюсь писать в файл, который не открыт, пытался вот так написать, но не правильно, подскажите, как это обойти


 if SpeedButton2.Click then
 begin
   Writeln(fil,'Число очков:  '+FrmTetr.lBall.Caption);
   Writeln(fil,'');
   CloseFile(fil);
   end
   else
   ...
 end;


valussev@mail.ru   (2009-12-26 12:24:00) [40]


 if not fileexists(fname) then
 rewrite(fil)
 else Append(fil);

вот так работате, спасибо


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо