Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 09.07.2018, 16:37   #1
alexsis_1976
Новичок
 
Регистрация: 09.07.2018
Сообщений: 2
Репутация: 10
Печаль Ошибки в файле

Добрый день.
Проблема следующего характера.Устройство посылает в сеть 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;

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 09.07.2018 в 17:10.
alexsis_1976 вне форума   Ответить с цитированием
Старый 09.07.2018, 17:14   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,904
Репутация: 5228
По умолчанию

нельзя работать с бинарным файлом как с текстовым.
а у Вас myFile явно типа TextFile

используйте бинарный файл.
и, кстати, лучше использовать класс TFileStream - туда сразу из вашего MemStream копируйте данные.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 09.07.2018, 17:18   #3
alexsis_1976
Новичок
 
Регистрация: 09.07.2018
Сообщений: 2
Репутация: 10
По умолчанию

А можно пример кода,с бинарным пробовал,но чего то не пошло,записывает только первые 1024 кб.
alexsis_1976 вне форума   Ответить с цитированием
Старый 09.07.2018, 17:25   #4
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,904
Репутация: 5228
По умолчанию

Цитата:
Сообщение от alexsis_1976 Посмотреть сообщение
А можно пример кода,с бинарным пробовал,но чего то не пошло,записывает только первые 1024 кб.
ну, так, если без проверки, то набросаю пример.

попробуйте примерно такой код:

Код:

const
  fname =  'video.jpg';

var 
  fm:word; 
  ts:TFileStream;

begin
  if FileExists(fname) then 
     fm:=fmOpenWrite 
  else 
     fm:=fmCreate; 

  ts:=TFileStream.Create(fname, fm); 
  ts.Seek(0,soFromEnd);      // goto end of file
  ts.CopyFrom(AData, AData.Size);
  ts.free;
end;

Serge_Bliznykov вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввести два файла F1, F2. Найти максимальные значения в каждом файле. В каждом файле заменить компоненты qwerty2106 Паскаль 1 07.06.2015 23:11
Игра - викторина. Ошибки, ошибки, ошибки!.. three_cats Общие вопросы C/C++ 1 27.10.2012 21:47
Поиск данных в текстовом файле (в самом файле! а не в Memo и не загружая всю инфу из файла в одну строку glagoff Помощь студентам 1 05.05.2010 13:00
Ошибки в OBJ-файле regfre Общие вопросы C/C++ 4 24.03.2009 17:02


05:05.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru