Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.20;
Скачать: CL | DM;

Вниз

Удаление данных из потока 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;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.041 c
4-1187099611
9899100
2007-08-14 17:53
2008.04.20
програмирование LPT порта


15-1204975614
Михаил
2008-03-08 14:26
2008.04.20
Диалог выбора типа линии


15-1204740905
tesseract
2008-03-05 21:15
2008.04.20
Мдя студенты проснулись


15-1204784753
DrAndrey
2008-03-06 09:25
2008.04.20
Выбор ADSL модема с 4 портами LincSys vs Zyxel vs D-Link


15-1204560445
Kolan
2008-03-03 19:07
2008.04.20
Подскажите генератор отчетов, умеющий создавать rtf?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский