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

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

TFileStream [WinXP]


Galiaf ©   (2005-08-21 17:32:00) 

Пытаюсь сохранить в переменную String 20 символов в конце файла, не получается. И ещё, как удалить 20 символов в конце файла? Видел что-то вроде того "tfilestream.delete" но никогда не пользовался и незнаю как.


Leonid Troyanovsky   (2005-08-22 09:58:00) [1]


> begin...end ©   (21.08.05 20:07) [16]

> Я за reraise. Я не поддерживал конкретный код обработки
> [2].


Я всего лишь имел ввиду, что гипотетически можно б было
написать обработчик, обрабатывающий все ошибки, без raise,
но, все равно, выглядел бы он подозрительно.

--
Regards, LVT.


Джо   (2005-08-21 21:13:00) [2]

Мне больше нравится такой вариант:

 Assert (fs.Size >= 20,'Недопустимый параметр');
 fs.Size := fs.Size - 20;

И пускай вызывающий код сам разбирается с этим.


Defunct   (2005-08-21 20:42:00) [3]

if size > 19 then
  size := size - 20
else
  size := 0;

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

try-finally здесь имеет место быть, а try-except imho - нет.


begin...end   (2005-08-21 20:07:00) [4]

> Leonid Troyanovsky ©   (21.08.05 20:03) [15]

> И, в любом случае, except without reraise выглядит
очень подозрительно.


Я заreraise. Я не поддерживал конкретный код обработки [2].


Leonid Troyanovsky   (2005-08-21 20:03:00) [5]


> begin...end ©   (21.08.05 19:52) [14]
>
> Т.е. try..except делает код нечитабельным, неприменимым
> к условию задачи и замедляет его выполнение, а try..finally
> -- нет?


Написать грамотный обработчик в данном случае - уже не пара
строк, которые, действительно, загромождают код.
В отличии, от try finally.
Т.е., последнее можно рекомендовать почти всегда,
а первое, только тогда, когда четко знаешь, как
можно выправить ситуацию.
И, в любом случае, except without reraise выглядит
очень подозрительно.

--
Regards, LVT.


begin...end   (2005-08-21 19:52:00) [6]

> Alexander Panov ©   (21.08.05 19:39) [10]

> Именно "гипотетическая" ситуация.

Видимо, разработчики Borland так не считают, раз поднимают здесь исключение. И я не вижу ничего плохого в его обработке.

> Alexander Panov ©   (21.08.05 19:44) [12]

> в try..finally..end - да, но не в этом случае.

Т.е. try..except делает код нечитабельным, неприменимым к условию задачи и замедляет его выполнение, а try..finally -- нет?

Про "этот случай" я уже писал. Обрабатывать исключение только для показа сообщения вряд ли нужно. Вообще же исключение здесь возможно, и если нужно выполнить какие-либо иные действия при его возникновении, то обработчик нужен. Даже здесь.

Впрочем, дело Ваше. Я же остаюсь при своём мнении.


Alexander Panov   (2005-08-21 19:46:00) [7]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1124638541&n=3


Alexander Panov   (2005-08-21 19:44:00) [8]

begin...end ©   (21.08.05 19:42) [11]

в try..finally..end- да, но не в этом случае.


begin...end   (2005-08-21 19:42:00) [9]

> Leonid Troyanovsky ©   (21.08.05 19:33) [9]

> Плоха сама обработка.

Я говорил не о конкретном коде обработки в [2]. Имел в виду, что, вообще говоря, заключение кода изменения Size в try..except (или try..finally) может быть обоснованным.

> Тем более сообщение может дезориентировать,
в отличии от EStreamError.


Здесь вряд ли возникнет EStreamError. А насчёт сообщения -- согласен.


Alexander Panov   (2005-08-21 19:39:00) [10]

begin...end ©   (21.08.05 19:30) [8]
Как раз для новичков попытка изменения размера открытого для чтения файла не является "гипотетической".


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


Leonid Troyanovsky   (2005-08-21 19:33:00) [11]


> begin...end ©   (21.08.05 19:16) [4]

> Что плохого в обработке исключения в данном случае?


Плоха сама обработка.
Она скрывает исключения от внешнего try или глобального
обработчика. Тем более сообщение может дезориентировать,
в отличии от EStreamError.

--
Regards, LVT.


begin...end   (2005-08-21 19:30:00) [12]

> Alexander Panov ©   (21.08.05 19:26) [7]

> В каком месте? При каких условиях?

В месте, где вызывается Win32Check. При условии, что файл открыт без прав GENERIC_WRITE.

> Может быть, не стоит устраивать теоретические дискуссии в новичковой конференции и говорить о неких "гипотетичских" исключениях при уменьшении размера TFileStream на 20 байт?

Как раз для новичков попытка изменения размера открытого для чтенияфайла не является "гипотетической".


Alexander Panov   (2005-08-21 19:26:00) [13]

begin...end ©   (21.08.05 19:24) [6]
При изменении свойства THandleStream.Size исключение вполне может возникнуть.


В каком месте? При каких условиях? Может быть, не стоит устраивать теоретические дискуссии в новичковой конференции и говорить о неких "гипотетичских" исключениях при уменьшении размера TFileStream на 20 байт?


begin...end   (2005-08-21 19:24:00) [14]

> Alexander Panov ©   (21.08.05 19:19) [5]

> Зачем? Для того, чтобы усложнить код?

Для того, чтобы обработать возможное исключение.

> Это то же самое, если вместо условных переходов поднимать в программе исключения...

Речь не о поднятии исключений, а об их обработке. При изменении свойства THandleStream.Size исключение вполне может возникнуть.


Alexander Panov   (2005-08-21 19:19:00) [15]

Зачем? Для того, чтобы усложнить код? Чтобы сделать более медленные программные конструкции? Это то же самое, если вместо условных переходов поднимать в программе исключения, что совершенно необоснованно в большинстве подобных случаев.


begin...end   (2005-08-21 19:16:00) [16]

> Galiaf   (21.08.05 17:32)

> Пытаюсь сохранить в переменную String 20 символов в конце файла, не получается.

Покажите код.

> TUser ©   (21.08.05 19:03) [2]

> possibly file size is less than 20

Разве в этом случае возникнет исключение?

> Alexander Panov ©   (21.08.05 19:10) [3]

Что плохого в обработке исключения в данном случае?


Alexander Panov   (2005-08-21 19:10:00) [17]

Вряд ли это лучше.
Не надо использовать исключения  там, где это не нужно.


TUser   (2005-08-21 19:03:00) [18]

>  if fs.Size >= 20 then
>    fs.Size := fs.Size - 20;

Лучше, наверное,
try
 fs.Size := fs.Size - 20;
except
 ShowMessage('Error: possibly file size is less than 20, or you have not permissions to midify it')
end;


Eraser   (2005-08-21 17:48:00) [19]

Galiaf   (21.08.05 17:32)
как удалить 20 символов в конце файла?


var fs: TFileStream;
... create
 if fs.Size >= 20 then
   fs.Size := fs.Size - 20;


Наверх

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