|
#1
|
|||
|
|||
Ошибки в файле
Добрый день.
Проблема следующего характера.Устройство посылает в сеть udp пакеты (файл картинки 640х480),передача ведется пакетами по 1024 байта,50 пакетов 1024 и а пакет 320 байт.На стороне компьютера пакеты собираются в файл,так вот при сохранении в файл теряются байты,картинка искажается причем характер искажений постоянный(байты отсутствуют в одних и тех же позициях)размер файла меньше оригинального всегда на одну и ту же величину,сниффер показывает что все пакеты прибыли 50 пакетов 1024кб и 1-320 байт,если скопировать принятые пакеты со сниффера, то получается переданная картинка байт в байт, искажения отсутствуют,если в программе сохранять каждый блок в отдельный файл то получается 50 файлов по 1024 кб 1 по 320, получим 51520 что совпадает с размером исходного файла, при копировании в один файл его размер всегда равен 50722 кб, в какую сторону копать? переробовал все что можно, думал что заваливает пакетами-поставил задежку между посылками 1 сек -то же самое.код сохранения в файл Код:
begin text:=''; MemStream:= TMemoryStream.Create; MemStream.CopyFrom(AData, AData.Size); MemStream.Position:=0; SetString(text, nil, MemStream.Size); MemStream.Read(Pointer(text)^,MemStream.Size); memo.Lines.Add(IntToStr(MemStream.Size)); AssignFile(myFile, 'video.jpg'); if FileExists ('video.jpg') then begin Append (myFile); end else begin Rewrite (myFile); end; Write(myFile,text); CloseFile(myFile); MemStream.free; end; Последний раз редактировалось Admin, 09.07.2018 в 21:19. |
#2
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
Скорее, там символ #0 где-нить проскакивает. Вот данные и обрезаются.
Пиши сразу в TFileStream, без промежуточной String (которая у тебя text). |