![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi 2005, проблема с TStream [D2005, XP]
Джованни © (2014-02-11 21:22:00)Доброг овремени суток, уважаемые.
Возникла проблема с TStream, а именно - необходимо удалить кусок данных в произвольном месте потока.
Вот, как пытаюсь реализовать идею:
procedure ChangeString(Source: TStream; Position, Count, Length: Int64; Data: WideString);
var
Buffer: array [0..BufMax] of byte;
readfrom, writeto, red, APos, ASize : int64;
begin
try
APos := Position;
ASize := Source.Size;
while APos > 0 do
begin
Source.Seek(Count, soFromCurrent);
Source.WriteBuffer(Buffer[0], BufMax);
Inc(APos);
Source.Position := APos - Length;
Source.Seek(Count, soFromCurrent);
Source.ReadBuffer(Buffer[0], BufMax);
end;
finally
end;
end;
Объясню на пальцах:
есть массив байт:
000000
001110
000000
Необходимо от позиции третьей слева единицы скопировать байты в буфер (Но не во второй TMemoryStream).
Затем с позиции первой единицы слева начать запись иных байт (не из буфера).
Затем поставить позицию в файле в конец новых записанных байт и прочитать туда же данные из ранее записанного буфера.
Приведенный код кстати кажется пишет в буфер (во всяком случае, ошибок не возникало), но не справляется со своей задачей.
ВРоде и алгоритм есть, но реализовать никак не осилю.
Буду благодарен любой помощи и правкам моего "кода".
MBo (2014-02-12 08:19:00) [21]Я не понял, что нужно сделать. Объяснение на пальцах не согласуется с заявленной целью "удалить кусок данных"
Может, стоит показать на примере массива abcdefghijklmn и 'иных байтов' 0123456
Джованни (2014-02-11 21:35:00) [22]Rouse_ извините, просто браузер выдал ошибку из-за интернета и я подумал, что сообщение не опубликовалось, а проверить не сообразил.
Конечно учту это правило)
Rouse_ (2014-02-11 21:33:00) [23]Не нужно делать дубли веток, тем более с разными никами. (на будущее..)