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