Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Добрый день.
Проблема следующего характера.Устройство посылает в сеть 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 в 16:10.
alexsis_1976 вне форума Ответить с цитированием
Старый 09.07.2018, 16:14   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

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

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

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

Цитата:
Сообщение от 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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввести два файла F1, F2. Найти максимальные значения в каждом файле. В каждом файле заменить компоненты qwerty2106 Паскаль, Turbo Pascal, PascalABC.NET 1 07.06.2015 22: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 16:02