Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 968

/ вопрос закрыт /

Здравствуйте, уважаемые эксперты!
RAD 2010 Delphi ругаеться на строчку
MemStream.CopyFrom(AData, AData);

как исправить?

Приложение:
  1. procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  2. AData: TBytes; ABinding: TIdSocketHandle);
  3. begin
  4. MemStream:= TMemoryStream.Create;
  5. MemStream.CopyFrom(AData, AData);
  6. MemStream.SaveToFile('C:\logo.jpg');
  7. form11.Image1.Picture.LoadFromFile('C:\logo.jpg');
  8. if form11.Showing then
  9. begin
  10. serversocket1.Socket.Connections[UserList.ItemIndex].SendText('ikr');
  11. end;
  12. MemStream.Free;
  13. end;


Dimitriy Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: Dimitriy (статус: Посетитель)
Вопрос отправлен: 27 января 2011, 04:16
Состояние вопроса: закрыт, ответов: 1.

Ответ #1. Отвечает эксперт: DNK

Здравствуйте, Dimitriy!
Не разу не работал в Delphi2010, но рискну предположить. Дело в том, что метод CopyFrom в качестве параметров требует другой поток и длинну копируемых данных, а AData - это динамический массив. И зачем гонять данные в памяти туда-сюда, сохраняй прямо в файл.

FStream := TFileStream.Create('C:\logo.jpg', fmOpenWrite);
try
  FStream.WriteBuffer(AData[0], Length(AData));
finally
  FStream.Free;
end;

Ответ отправил: DNK (статус: Студент)
Время отправки: 27 января 2011, 20:17
Оценка за ответ: 5

Комментарий к оценке: Всем огромное спасибо, заработало =)

Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 27 января 2011, 20:54; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 27 января 2011, 08:28 [#1]:

Совершенно правильно ругается. Ты бы, хоть, посмотрел в хэлпе, какие параметры у метода TStream.CopyFrom.
function CopyFrom(Source: TStream; Count: Int64): Int64;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DNK

DNK (статус: Студент), 27 января 2011, 08:34 [#2]:

Не разу не работал в Delphi2010, но рискну предположить. Дело в том, что метод CopyFrom в качестве параметров требует другой поток и длинну копируемых данных, а AData - это динамический массив. И зачем гонять данные в памяти туда-сюда, сохраняй прямо в файл.
FStream := TFileStream.Create('C:\logo.jpg', fmOpenWrite);
try
  for i:=0 to Length(AData) - 1 do
    FStream.WriteBuffer(AData[i], 1);
finally
  FStream.Free;
end;
"Digital Networked Knight"
min@y™

min@y™ (статус: Доктор наук), 27 января 2011, 08:45 [#3]:

Цитата (DNK):


FStream := TFileStream.Create('C:\logo.jpg', fmOpenWrite); 
try 
  for i:=0 to Length(AData) - 1 do   
    FStream.WriteBuffer(AData[i], 1); 
finally 
  FStream.Free; 
end;

За такой код надо руки отрывать без суда и следствия!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DNK

DNK (статус: Студент), 27 января 2011, 09:13 [#4]:

min@y™: Аргументируй
"Digital Networked Knight"
min@y™

min@y™ (статус: Доктор наук), 27 января 2011, 09:26 [#5]:

Цитата (DNK):

Аргументируй

Ну, раз ты сам не допёр, то пожалуйста.
Вмето побайтной (!!!) записи буфера в файл нормальные люди пишут весь буфер целиком без всяких циклов:
FStream.WriteBuffer(AData[0], Length(AData));
А теперь подумай, какой код будет работать быстрее: твой или мой?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DNK

DNK (статус: Студент), 27 января 2011, 20:16 [#6]:

min@y™: Да ты фашист!
"Digital Networked Knight"
min@y™

min@y™ (статус: Доктор наук), 27 января 2011, 20:54 [#7]:

Цитата (DNK):

Да ты фашист!

Мой дед, Александр Иванович Скороходов (1923-1999) всю войну прошёл, был коммандиром экипажа бомбардировщика. Моя бабка Валентина Яковлевна Скороходова (1926-2008) - ленинградская блокадница, которая до самой смерти курицу ела вместе с костями. Двое из четырёх их детей умерли в младенчестве в в годы войны. Все их ордена и медали хранятся у меня до сих пор, и я передам их своим сыновьям по наследству.

За "фашиста" не задумываясь буду бить ногами, пока силы не иссякнут.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

27 января 2011, 22:04: Вопрос закрыт (решение принял Ерёмин А.А.): Война. Автор вопроса, думаю, ответ на свой вопрос получил.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:02
Выполнено за 0.03 сек.