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

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

TStream


Страницы:   1 2 3 4

pathfinder ©   (2007-10-18 20:34:00) 

Добрый вечер.
Подскажите пожалуйста, каким образом лучше сохранить данные из TMemoryStream в файл? Но не все содержимое, а только конец определенного размера.
У меня получилось что-то такое:

 FData: TMemoryStream;
 FLimit: Integer;
 Stream: TFileStream;
 StartPos: PByte;

 StartPos := FData.Memory;
 Inc(StartPos, FData.Size - FLimit);
 Stream := TFileStream.Create(FileName, fmCreate);
 Stream.WriteBuffer(StartPos^, FLimit);
 Stream.Free;


pathfinder   (2007-10-18 22:28:00) [61]

"Project ... raised exception class EReadError with message 'Stream read error' "

возникает на строке Stream.CopyFrom(FData, FLimit);

 FData.Seek(FLimit, soFromEnd);
 Stream := TFileStream.Create(FileName, fmCreate);
 Stream.CopyFrom(FData, FLimit);
 Stream.Free;

И я не совсем понял почему в методе Seek к размеру потока прибавляется смещение в случае сдвига от конца..

function TCustomMemoryStream.Seek(Offset: Longint; Origin: Word): Longint;
begin
 case Origin of
   soFromBeginning: FPosition := Offset;
   soFromCurrent: Inc(FPosition, Offset);
   soFromEnd: FPosition := FSize + Offset;
 end;
 Result := FPosition;
end;


Anatoly Podgoretsky   (2007-10-18 22:19:00) [62]

Точное сообщение компилятора, с номером строки.


pathfinder   (2007-10-18 22:16:00) [63]

Почему-то у меня с аналогичным кодом компилятор выдает ошибку Stream Read Error.


pathfinder   (2007-10-18 21:25:00) [64]


> Jump   (18.10.07 21:22) [1]


Спасибо!


Jump   (2007-10-18 21:22:00) [65]

Передвинь указатель к нужной тебе позиции, и скопируй:

Count := 1024; // длина "хвоста" в байтах
MemoryStream.Seek(Сount, soFromEnd);
FileStream.CopyFrom(MemoryStream, Сount);


Страницы:   1 2 3 4

Наверх

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