|  | 
 
 | 
|  | 
| 
			 
			#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). |