![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблема с сохранением в файл
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], и вобще ничего местами не меняя
какое условие нужно использовать здесь
ifSpeedButton2.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);
вот так работате, спасибо