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