Добрый день. Есть вопрос на засыпку. Может, кто сталкивался.
Есть такая задача:
1. Запись в файл некоторых данных.
2. Допись в этот же файл других аналогичных данных
Проблема в том, что данные записываются из некоего объекта в форматированном виде. 1-я задача решается без проблем. Со второй уже сложнее. В ней то вся и загвоздка.
Легче привести пример:
1.
<DocumentElement>
<Table>
<Time>632693092850000000</Time>
<Guid>ff8472e0-51e7-45d8-b1ef-a5de0dc18d26</Guid>
<Type>Event0</Type>
<Name>OPEN_APPLICATION</Name>
</Table>
</DocumentElement>
2. Должно выглядеть так:
<DocumentElement>
<Table>
<Time>632693092850000000</Time>
<Guid>ff8472e0-51e7-45d8-b1ef-a5de0dc18d26</Guid>
<Type>Event0</Type>
<Name>OPEN_APPLICATION</Name>
</Table>
<Table>
<Time>632693092850312500</Time>
<Guid>c1e2ae40-beb0-4d38-961f-dca6e86897d3</Guid>
<Type>Event1</Type>
<Name>OPEN_APPLICATION</Name>
</Table>
</DocumentElement>
На деле:
<DocumentElement>
<Table>
<Time>632693092850000000</Time>
<Guid>ff8472e0-51e7-45d8-b1ef-a5de0dc18d26</Guid>
<Type>Event0</Type>
<Name>OPEN_APPLICATION</Name>
</Table>
</DocumentElement>
<DocumentElement>
<Table>
<Time>632693092850312500</Time>
<Guid>c1e2ae40-beb0-4d38-961f-dca6e86897d3</Guid>
<Type>Event1</Type>
<Name>OPEN_APPLICATION</Name>
</Table>
</DocumentElement>
Естесственно, при чтении информации возникает проблема, поскольку не должно быть более одного элемента верхнего уровня.
Проблема разбивается на две поменьше:
При дописи в файл удалить завершающий тэг
</DocumentElement>
Это решается несложно путём изменения длинны файла на необходимое количество символов
А вот далее уже загвоздка
Происходит следующее:
<DocumentElement>
<Table>
<Time>632693092850000000</Time>
<Guid>ff8472e0-51e7-45d8-b1ef-a5de0dc18d26</Guid>
<Type>Event0</Type>
<Name>OPEN_APPLICATION</Name>
</Table>
<DocumentElement>
<Table>
<Time>632693092850312500</Time>
<Guid>c1e2ae40-beb0-4d38-961f-dca6e86897d3</Guid>
<Type>Event1</Type>
<Name>OPEN_APPLICATION</Name>
</Table>
</DocumentElement>
Попытки перед записью обработать поток таким образом, чтобы
устранить начальный тэг <DocumentElement> ни к чему не приводят.
Варианты типа Stream.Position=... Не дают результатов.
Streem.Seek(...) тоже по нулям.
В общем, проблемка, я думаю, понятна.
Может, кто уже ломал голову - подскажите.
Можно, конечно, изъять массив байтов, обработать соответствующим образом через CopyArray и т.д., но программа будет работать с большими объёмами данных и все эти копирования приведут к перегруженности системы лишней обработкой данных. Когда всего лишь у потока нужно обрезать начало. Конец режется легко:
Streem.SetLength(...), а вот с началом траблы. Заранее спасибо за проявленную солидарность. Пока!