Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
1-1126370669
Still Swamp
2005-09-10 20:44
2005.10.02
Как пояснить Excel что мне не надо сохранять файл?


1-1126176960
Рафик
2005-09-08 14:56
2005.10.02
ListBox1 - Двойной щелчок


1-1126683651
Tonich
2005-09-14 11:40
2005.10.02
Структура (запись)


14-1126247342
Igorek
2005-09-09 10:29
2005.10.02
Профпригодность модератора


14-1126079926
Антоний
2005-09-07 11:58
2005.10.02
Файл *.12M