![]() |
| ||
|
|
Новости |
Поиск |
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)то не дописывает в него
Германн (2009-12-27 01:12:00) [1]
> Ну так сделай когда уже набраны.
>
В OnClose или в OnCloseQuery.
Тоже хороший вариант, кстати.
Anatoly Podgoretsky (2009-12-27 01:06:00) [2]> fen (27.12.2009 00:19:36) [36]
Ну так сделай когда уже набраны.
fen (2009-12-27 00:41:00) [3]всем спасибо, за мучения со мной )
Sha (2009-12-27 00:34:00) [4]Выбери один из двух вариантов и не мучайся:
1. Файл объявлен локально в методе формы.
Когда надо записать в файл, открываешь его, пишешь и закрываешь.
2. Файл объявлен в protected секции формы.
Открываешь файл в FormCreate, пишешь в методах формы, закрываешь в FormDestroy.
sniknik (2009-12-27 00:28:00) [5]> а если мне нужно записать кол-во очков, набранных непосредственно перед закрытием формы?
неважно когда, принцип один - открываешь → записываешь → закрываешь. для гарантии используешь блок try finally. все. все логично, никакой путаницы, все файловые хендлы для системы доступны (поработал бы в DOS где их было 8 всего вроде по умолчанию, быстрее дошло бы.)
fen (2009-12-27 00:22:00) [6]
> с чего это? нет таких правил чтобы файл закрывался только
> при закрытии формы.
а если мне нужно записать кол-во очков, набранных непосредственно перед закрытием формы?
fen (2009-12-27 00:19:00) [7]
> очему нельзя по SpeedButton2 [4] открыть файл, записать
> что надо и закрыть?
да потому что при нажатии на SpeedButton2.Click очки еще не набраны!
Andy BitOff (2009-12-27 00:15:00) [8]> fen (26.12.09 23:59) [32]
Хорошо что пишется, я бы даже сказал - замечательно. А теперь скажи, почему нельзя открыть файл, записать в него очки и закрыть? Почему нельзя по SpeedButton2 [4] открыть файл, записать что надо и закрыть? Объясни, почему нельзя сделать так.
sniknik (2009-12-27 00:15:00) [9]> да какое тут извращение?
пока маленькое, но стоит только начать...
> при нажатии на кнопу SpeedButton2.Click у меня открывается диалог, куда записывается имя игрока ...
логика действий это не то же самое, что исполнение.
> а закрытие может происходить только при закрытии формы
с чего это? нет таких правил чтобы файл закрывался только при закрытии формы. (в отличие от правил работы с ресурсами которые есть)
p.s. вот теперь я понимаю откуда ноги растут у исполнителей длинных транзакций в базах, да еще завязанных на диалог с юзером...
с малого тренируются. т.к. сказать воспитываем кадры на простых примерах. :)))
Германн (2009-12-27 00:05:00) [10]
> прочти [29] внимательнее
Зачем еще раз читать бредовую "якобы" причину?
fen (2009-12-26 23:59:00) [11]
> Andy BitOff ©
прочти [29] внимательнее
> закрытие может происходить только при закрытии формы, т.
> к. в файл пишется еще кол-во очков, набранных игроком
Andy BitOff (2009-12-26 23:54:00) [12]> fen (26.12.09 23:17) [29]
Блин, тебе же говорят - sniknik © [17] (первая часть). Открывай его где надо, вноси свои изменения и сразу закрывай. Что непонятно-то?
Германн (2009-12-26 23:47:00) [13]
> а закрытие может происходить только при закрытии формы,
> т.к. в файл пишется еще кол-во очков, набранных игроком
Это не может являться препятствием для решения [11].
fen (2009-12-26 23:17:00) [14]
> sniknik ©
да какое тут извращение?
я не мог сделать так, как описано в [11], т.к.
при нажатии на кнопу SpeedButton2.Click у меня открывается диалог, куда записывается имя игрока (вся эта программа - игра "Тетрис"), которое и является именем файла, соответственно я не могу открыть файл до того, как нажал на кнопку, а закрытие может происходить только при закрытии формы, т.к. в файл пишется еще кол-во очков, набранных игроком, как раз поэтому я и спрашивал [4].
fen (2009-12-26 23:11:00) [15]
> Anatoly Podgoretsky ©
я промолчу...
Anatoly Podgoretsky (2009-12-26 22:45:00) [16]> sniknik (26.12.2009 22:24:26) [26]
Если не пробьет, то может прибьет.
sniknik (2009-12-26 22:24:00) [17]> я вот это добиваюсь уже 20 сообщений
ты получил бы это сразу если бы в вопросе описал причину из-за которой без извращений нельзя... ну и если бы ее признали не надуманной. а так, раз это от непонимания, то пытались наставить на путь истинный. видимо неудачно.
> но можно было и без саарказма это сразу выдать
нельзя. либо так, либо никак. и до сих пор надежда, может тебя "пробьет", ну или хотя бы те кто будет читать это после "внемлют".
(если сразу после вопроса на извращение будет ответ, будет вид как будто так и надо делать... "кульных хацкеров" в инете и без того хватает чтобы к ним еще искренне заблуждающихся добавлять.)
fen (2009-12-26 21:12:00) [18]теперь спасибо, но можно было и без саарказма это сразу выдать
fen (2009-12-26 21:06:00) [19]
> то проверяй не клик (чего ты с него вообще хотел?) а файловый
> хендл на "открытость", т.е. if TTextRec(fil).Handle <> 0
> then
я вот это добиваюсь уже 20 сообщений
sniknik (2009-12-26 20:09:00) [20]> А нафиг делать глобализацию,
потому что это лучше чем то что сейчас у него, это однозначность, открыли прогу файл блокирован. а у него он блокируется не пойми когда, и в любое время. (по опыту цто однозначность поведения, даже неприятную юзеру можно объяснить фичей)
> лучше по месту с try finally end
а кто спорит (см. [17])? но автор же хочет извращений.