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

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

Truncate и TFileStream


Nucer ©   (2008-05-19 22:53:00) 

Как так же быстро обрезать файл через TFileStream как это делает функция Truncate?


Palladin   (2008-05-20 11:44:00) [1]

среда - не является компилятором и на то что происходит в коде ей глубоко монопенисуально...


Nucer   (2008-05-20 11:41:00) [2]

Согласен, что среда показала то, что смогла показать, но если продолжить демагогию...

В коде:
sr.Size:=vers[i].size
Навожу на sr.Size. Логично предположить, что мне нужен Write? =)


Palladin   (2008-05-20 11:34:00) [3]


> Nucer   (20.05.08 11:31) [10]

а с чего ты взял, что щелкнув на свойствеSize, ты вдруг в мнгновение ока полетишь на SetSize ? откуда среде знать, что тебе нужно от свойстваSize, его метод/поле Read или его метод/поле Write ?


Nucer   (2008-05-20 11:31:00) [4]

Потому что TFileStream потомок THandleStream и наследует его переопределенный метод SetSize.


Palladin   (2008-05-20 11:23:00) [5]


> хотя должно было привести к THandleStream.SetSize

с чего ты взял?


Nucer   (2008-05-20 11:13:00) [6]

Прошу прощения, это delphi привело к методу TStream, когда я щелкнул по Size с зажатыми CTRL и ALT, хотя должно было привести к THandleStream.SetSize.


palva   (2008-05-20 11:01:00) [7]


> Хотя работает... но КАК - для меня остается загадкой
>

Выхода два. Либо сами учите английский либо платите деньги переводчику.


ЮЮ   (2008-05-20 11:00:00) [8]

> В classes у TStream:


> Получается такой вариант не работает?


> Хотя работает… но КАК — для меня остается загадкой


Смотреть, наверное, следует у TFileStream


palva   (2008-05-20 10:59:00) [9]

Nucer   (20.05.08 10:28) [3]
Сначала вы спрашивали про TFileStream, а теперь почему-то перешли на TStream.
Вы лучше сначала попробуйте, а потом говорите, что не работает.


Nucer   (2008-05-20 10:55:00) [10]

Хотя работает... но КАК - для меня остается загадкой


Nucer   (2008-05-20 10:28:00) [11]

В classes у TStream:
property Size: Int64 read GetSize write SetSize64;

procedure TStream.SetSize(NewSize: Longint);
begin
 // default = do nothing  (read-only streams, etc)
 // descendents should implement this method to call the Int64 sibling
end;

procedure TStream.SetSize64(const NewSize: Int64);
begin
 SetSize(NewSize);
end;

procedure TStream.SetSize(const NewSize: Int64);
begin
{ For compatibility with old stream implementations, this new 64 bit SetSize
 calls the old 32 bit SetSize.  Descendent classes that override this
 64 bit SetSize MUST NOT call inherited. Descendent classes that implement
 64 bit SetSize should reimplement their 32 bit SetSize to call their 64 bit
 version.}
 if (NewSize < Low(Longint)) or (NewSize > High(Longint)) then
   raise ERangeError.CreateRes(@SRangeError);
 SetSize(Longint(NewSize));
end;


Получается такой вариант не работает?


Anatoly Podgoretsky   (2008-05-19 23:15:00) [12]

> {RASkov}  (19.05.2008 23:08:01)  [1]

Из справки

Call SetSize to set the size of the resource. SetSize calls Seek to go to the indicated position, and then writes an end of file marker. If the size of the resource can not be changed, an exception is raised. For example, calling SetSize for a file handle that was opened in fmOpenRead mode will raise an exception.


{RASkov}   (2008-05-19 23:08:00) [13]

> [0] Nucer   (19.05.08 22:53)

Помоему просто выставить новый Size достаточно.... Это если хвост обрезать...


Наверх

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