Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];

Вниз

Удаление данных из потока TMemoryStream   Найти похожие ветки 

 
beglec   (2008-03-24 08:47) [0]

Подскажите пожалуйста как лучше вырезать несколько байт из потока TMemoryStream;

У меня есть несколько потоков в которых хранится разная типизированная информация, но в одном потоке один тип.
я сделал процедуру.

// ------------------------------------------------------------------------------ удаление данных из любого потока
// stream - поток данных
// _id - номер записи в потоке
// _size_record - размер одной записи
procedure EraseRecordInStream(var _stream: TMemoryStream; _id,_size_record: Integer); // _id - это порядковый номер записи в самом потоке а не в базе данных, это сделано в связи с тем, что IDRec неизвестно где определен у записи. Бывает по разному
var stream2: TMemoryStream;
   buf: array of byte; // размер 1 записи
begin
  if _stream.Size=0 then Exit;                                                  // если в потоке нет данных то и удалять нечего
  Stream2  :=TMemoryStream.Create;                                              // создаем поток для копирования данных
  SetLength(buf,_size_record);                                                  // размер одной записи
  _stream.Seek(0,soFromBeginning);                                              // переходи в начало потока
  while _stream.Position<_stream.Size do                                        // пройтись по всему потоку
  begin
     _stream.Read(buf,_size_record);                                            // читаем запись/данные
     // после это строки _size_record получает бешенное значене отличное от входящего, а buf все равно 0 хотя данные в потоке есть, проверял SaveToFile

     if (_stream.Position div _size_record)=_id then Continue;                  // если запись, которая требует удаления то не записываем в новый поток
     Stream2.Write(buf,_size_record);                                           // записываем запись в новый поток
  end;
  _stream.Clear;                                                                // очищаем входящий поток от данных
  _stream.LoadFromStream(Stream2);                                              // загружаем в нужный поток и зановго сформированного потока данных
  Stream2.Free;                                                                 // убиваем временный поток
end;

в чем дело не подскажите ?
Заранее благодарен


 
TUser ©   (2008-03-24 08:53) [1]


> я сделал процедуру.
>
> в чем дело не подскажите ?

:9) дело в том, что тебе понадобилась процедура, наверное.

Из возможных подводных камней - надо внимательно вычислять size_record, учитывая, что записи могут быть объявлены со словом packed или без него. Ну, а вообще, я бы не создавал дополнительного потока.


 
beglec   (2008-03-24 08:59) [2]

дык предложите решение.
я не утверждаю что мое решение идеально.

>> надо внимательно вычислять _size_record
дык я его не вычисляю!
оно просто в Read меняется - вопрос почему?


 
MBo ©   (2008-03-24 09:16) [3]

ошибка в работе с дин. массивом

_stream.Read(buf[0],_size_record);    

c write аналогично


 
beglec   (2008-03-24 09:27) [4]


> MBo

спасибки все сработало



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
3-1195702264
Петро
2007-11-22 06:31
2008.04.20
Универсальный доступ к СУБД


2-1206468305
Blind Guardian
2008-03-25 21:05
2008.04.20
Вопрос про отладку в Delphi 7


2-1206090533
Dima
2008-03-21 12:08
2008.04.20
Что за бред происходит???


2-1206285323
smartleds
2008-03-23 18:15
2008.04.20
Создал массив Трэк баров , подскажите как создать один


15-1204735704
Zeqfreed
2008-03-05 19:48
2008.04.20
Подскажите, пожалуйста, аудиоплеер на флэше





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский