Текущий архив: 2005.10.02;
Скачать: CL | DM;
Вниз
TFileStream Найти похожие ветки
← →
Galiaf (2005-08-21 17:32) [0]Пытаюсь сохранить в переменную String 20 символов в конце файла, не получается. И ещё, как удалить 20 символов в конце файла? Видел что-то вроде того "tfilestream.delete" но никогда не пользовался и незнаю как.
← →
Eraser © (2005-08-21 17:48) [1]Galiaf (21.08.05 17:32)
как удалить 20 символов в конце файла?var fs: TFileStream;
... create
if fs.Size >= 20 then
fs.Size := fs.Size - 20;
← →
TUser © (2005-08-21 19:03) [2]> 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;
← →
Alexander Panov © (2005-08-21 19:10) [3]Вряд ли это лучше.
Не надо использовать исключения там, где это не нужно.
← →
begin...end © (2005-08-21 19:16) [4]> 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:19) [5]Зачем? Для того, чтобы усложнить код? Чтобы сделать более медленные программные конструкции? Это то же самое, если вместо условных переходов поднимать в программе исключения, что совершенно необоснованно в большинстве подобных случаев.
← →
begin...end © (2005-08-21 19:24) [6]> Alexander Panov © (21.08.05 19:19) [5]
> Зачем? Для того, чтобы усложнить код?
Для того, чтобы обработать возможное исключение.
> Это то же самое, если вместо условных переходов поднимать в программе исключения...
Речь не о поднятии исключений, а об их обработке. При изменении свойства THandleStream.Size исключение вполне может возникнуть.
← →
Alexander Panov © (2005-08-21 19:26) [7]begin...end © (21.08.05 19:24) [6]
При изменении свойства THandleStream.Size исключение вполне может возникнуть.
В каком месте? При каких условиях? Может быть, не стоит устраивать теоретические дискуссии в новичковой конференции и говорить о неких "гипотетичских" исключениях при уменьшении размера TFileStream на 20 байт?
← →
begin...end © (2005-08-21 19:30) [8]> Alexander Panov © (21.08.05 19:26) [7]
> В каком месте? При каких условиях?
В месте, где вызывается Win32Check. При условии, что файл открыт без прав GENERIC_WRITE.
> Может быть, не стоит устраивать теоретические дискуссии в новичковой конференции и говорить о неких "гипотетичских" исключениях при уменьшении размера TFileStream на 20 байт?
Как раз для новичков попытка изменения размера открытого для чтения файла не является "гипотетической".
← →
Leonid Troyanovsky © (2005-08-21 19:33) [9]
> begin...end © (21.08.05 19:16) [4]
> Что плохого в обработке исключения в данном случае?
Плоха сама обработка.
Она скрывает исключения от внешнего try или глобального
обработчика. Тем более сообщение может дезориентировать,
в отличии от EStreamError.
--
Regards, LVT.
← →
Alexander Panov © (2005-08-21 19:39) [10]begin...end © (21.08.05 19:30) [8]
Как раз для новичков попытка изменения размера открытого для чтения файла не является "гипотетической".
Именно "гипотетическая" ситуация. Ошибаться могут не только новички, но если(как я уже говорил выше) на любой чих в программе в коде будет свой обработчик исключений, то код будет просто нечитабелен, а во многих случаях просто неоптимален и даже не применим по условиям задачи.
← →
begin...end © (2005-08-21 19:42) [11]> Leonid Troyanovsky © (21.08.05 19:33) [9]
> Плоха сама обработка.
Я говорил не о конкретном коде обработки в [2]. Имел в виду, что, вообще говоря, заключение кода изменения Size в try..except (или try..finally) может быть обоснованным.
> Тем более сообщение может дезориентировать,
в отличии от EStreamError.
Здесь вряд ли возникнет EStreamError. А насчёт сообщения -- согласен.
← →
Alexander Panov © (2005-08-21 19:44) [12]begin...end © (21.08.05 19:42) [11]
в try..finally..end - да, но не в этом случае.
← →
Alexander Panov © (2005-08-21 19:46) [13]http://delphimaster.net/view/15-1124638541/
← →
begin...end © (2005-08-21 19:52) [14]> Alexander Panov © (21.08.05 19:39) [10]
> Именно "гипотетическая" ситуация.
Видимо, разработчики Borland так не считают, раз поднимают здесь исключение. И я не вижу ничего плохого в его обработке.
> Alexander Panov © (21.08.05 19:44) [12]
> в try..finally..end - да, но не в этом случае.
Т.е. try..except делает код нечитабельным, неприменимым к условию задачи и замедляет его выполнение, а try..finally -- нет?
Про "этот случай" я уже писал. Обрабатывать исключение только для показа сообщения вряд ли нужно. Вообще же исключение здесь возможно, и если нужно выполнить какие-либо иные действия при его возникновении, то обработчик нужен. Даже здесь.
Впрочем, дело Ваше. Я же остаюсь при своём мнении.
← →
Leonid Troyanovsky © (2005-08-21 20:03) [15]
> begin...end © (21.08.05 19:52) [14]
>
> Т.е. try..except делает код нечитабельным, неприменимым
> к условию задачи и замедляет его выполнение, а try..finally
> -- нет?
Написать грамотный обработчик в данном случае - уже не пара
строк, которые, действительно, загромождают код.
В отличии, от try finally.
Т.е., последнее можно рекомендовать почти всегда,
а первое, только тогда, когда четко знаешь, как
можно выправить ситуацию.
И, в любом случае, except without reraise выглядит
очень подозрительно.
--
Regards, LVT.
← →
begin...end © (2005-08-21 20:07) [16]> Leonid Troyanovsky © (21.08.05 20:03) [15]
> И, в любом случае, except without reraise выглядит
очень подозрительно.
Я за reraise. Я не поддерживал конкретный код обработки [2].
← →
Defunct © (2005-08-21 20:42) [17]if size > 19 then
size := size - 20
else
size := 0;
исключения пусть обрабатываются на верху. т.к. все равно если возникает исключение здесь, дальнейшая работа с файлом невозможна.
try-finally здесь имеет место быть, а try-except imho - нет.
← →
Джо © (2005-08-21 21:13) [18]Мне больше нравится такой вариант:
Assert (fs.Size >= 20,"Недопустимый параметр");
fs.Size := fs.Size - 20;
И пускай вызывающий код сам разбирается с этим.
← →
Leonid Troyanovsky © (2005-08-22 09:58) [19]
> begin...end © (21.08.05 20:07) [16]
> Я за reraise. Я не поддерживал конкретный код обработки
> [2].
Я всего лишь имел ввиду, что гипотетически можно б было
написать обработчик, обрабатывающий все ошибки, без raise,
но, все равно, выглядел бы он подозрительно.
--
Regards, LVT.
Страницы: 1 вся ветка
Текущий архив: 2005.10.02;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.045 c