Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
Внизstream1.read(stream2,size); почему не работает? Найти похожие ветки
← →
self.name © (2008-08-02 01:12) [0]добрый вечер, мастера.
знаю, что можно сделать stream2.copyfrom..., но интересует именно такая реализация, как в теме..подскажите, в чём загвоздка?
← →
Поросенок Винни-Пух © (2008-08-02 01:20) [1]в тебе загвоздка. хочешь странного.
← →
Поросенок Винни-Пух © (2008-08-02 01:21) [2]посмотри тип первого параметра для метода read и сравни с тем, что ты ему пытаешься подсунуть
← →
sniknik © (2008-08-02 01:44) [3]> stream1.read(stream2,size); почему не работает?
вообщето оно должно работать... и скорее всего работает.
другое дело, что ожидаешь ты от него (судя по дальнейшему) не того, что оно делает, а совсем другого.
> знаю, что можно сделать stream2.copyfrom...
по смыслу это совсем не тоже самое, что в заголовке.
> но интересует именно такая реализация
ага. хочу перейти дорогу, но не могу, потому, что иду вдоль нее, а не поперек... ???
а скажи зачем тебе именно такая реализация? почему не переходить поперек, если нужно переходить, а реализацию "вдоль" оставить тем кто желает по ней ездить...
← →
KilkennyCat © (2008-08-02 01:44) [4]установи position на нуль. а то мож ты хрен знает откуда читаешь.
← →
Поросенок Винни-Пух © (2008-08-02 02:02) [5]вообщето оно должно работать...
function Read(var Buffer; Count: Longint): Longint;
с чего это оно вдруг "должно работать" ?
← →
Alucard (2008-08-02 02:03) [6]Stream - это класс, а методу нужен указатель на память, которой данный класс управляет, это свойство Memory.
stream1.read(stream2.Memory,size);
← →
Поросенок Винни-Пух © (2008-08-02 02:04) [7]требуется адрес, передается указатель да еще и по ссылке.
и вдруг чудесным образом "должно работать"
← →
Поросенок Винни-Пух © (2008-08-02 02:05) [8]а методу нужен указатель на память
адрес ему нужен, а не указатель
← →
self.name © (2008-08-02 02:24) [9]сделал надстройку над read, чтобы оно перед записью данных писало что это за данные и их размер...т.е. идет инфа(рекорд)+данные..а вот столкнулся с тем, что надобы и stream записать\считать...и не получается
← →
Anatoly Podgoretsky © (2008-08-02 09:33) [10]Да адрес передается в процедуру и работает, только не это ожидается.
← →
sniknik © (2008-08-02 12:12) [11]> что надобы и stream записать\считать...и не получается
так таки сам stream или данные которые он содержит?
вообщето когда так говорят подразумевают одно, но ты пытаешься(показываешь) разное но думаешь судя по всему, что это одно и тоже...
> и не получается
в чем это выражается? одно дело ошибка от вызова абстрактного метода, другое получение не тех данных что ожидаются... разные же вещи. а у тебя возможно и то и то в зависимости от скрываемых исходных данных.
← →
Gamer (2008-08-02 13:03) [12]
> так таки сам stream или данные которые он содержит?
всё таки хотелось бы данные, которые он содержит..
← →
self.name © (2008-08-02 13:06) [13])))[12] пост от меня
← →
sniknik © (2008-08-02 13:21) [14]теперь вернемся к исходному вопросу
> stream1.read(stream2,size); почему не работает?
(мог бы уже и сам "допереть") а почему оно должно работать? (работа тут = ожидаемое тобой копирование данных стрима) если ты вместо нее пытаешься скопировать структуру его обьекта (данных в ней нет, только указатель на них).
ну вот почему?
← →
self.name © (2008-08-02 13:28) [15]прочёл. понял.
а как бы заставить его работать?
← →
self.name © (2008-08-02 13:35) [16]или проще, наверное, будет написать еще одну процедуру, которая будет делать CopyFrom..?
← →
Сергей М. © (2008-08-02 13:47) [17]
> как бы заставить его работать?
>
Передать ему правильные параметры.
А с какого вдруг перепугу Read ? Ты самоделкин что ли ?
Есть же ReadBuffer, WriteBuffer - они же тебе, чуть что не так, обязаны хряснуть по макушке соотв.исключением)
← →
self.name © (2008-08-02 14:11) [18]ничего они не делают) ничем не стучали.
сделал CopyFrom - всё работает
← →
Сергей М. © (2008-08-02 14:15) [19]Мда ..
Печально я гляжу на наше ..
← →
self.name © (2008-08-02 14:24) [20]вот...незнаю, как подставить stream так, чтобы данные записались нормально
а в интернетеничего и не найти. потому и пришлось обойти так.
← →
Сергей М. © (2008-08-02 14:49) [21]
> незнаю, как подставить stream так, чтобы данные записались
> нормально
А как они, по-твоему, записываются "ненормально" ?
← →
self.name © (2008-08-02 15:02) [22]так как я записал в теме. это ж выходит ненормально...как я понял.
после такого чтения вообще не могу обратиться к stream2
← →
sniknik © (2008-08-02 15:14) [23]> это ж выходит ненормально.
это нормально. абсолютно нормально. оно делает именно то для чего написано. но вот ты почемуто ждешь другого.
p.s.
имхо, автор безнадежен. тему можно закрывать. он так ничего и не понял, и не поймет судя по всему.
считает, что дело в стриме/методах, а не в нем/его дурости/написанной им абракадабре.
------------------------------------------
поросенок не мечтающий стать беконом, бесперспективен! © афоризмы какието.
← →
self.name © (2008-08-02 15:49) [24]:)можно
← →
Сергей М. © (2008-08-02 17:47) [25]
> такого чтения вообще не могу обратиться к stream2
Что значит "не могу" ?
Тебе кто-то или что-то мешает ?
← →
Amoeba © (2008-08-02 17:59) [26]
> self.name © (02.08.08 15:02) [22]
Свой код может предъявишь на обозрение?
← →
Сергей М. © (2008-08-02 18:03) [27]
> может предъявишь
Как он тебе предъявит-то ?
Он же стесняется обратиться к стриму, мол, многоуважаемый стрим, разрешите Вас представить на обозрение)
← →
Anatoly Podgoretsky © (2008-08-02 18:06) [28]> Сергей М. (02.08.2008 18:03:27) [27]
А что других провайдеров, кроме Стрима нет?
← →
self.name © (2008-08-02 18:32) [29]
ToDataHeader = record
Name: string[25];
Size: integer;
end;
...
function ReadData(var Buffer):int64;//return OldPosition
var
mDataHeader:ToDataHeader;
begin
Result:=f.Position;
f.ReadBuffer(mDataHeader,SizeOf(mDataHeader));
f.ReadBuffer(Buffer, mDataHeader.Size);
end;
вот оно..вообщем-то. f: TFIleStream - создан до вызова ReadData.
> Что значит "не могу" ?
обратиться к стриму не могу, потому что вылетает ошибка.
← →
Сергей М. © (2008-08-02 18:36) [30]
> вылетает ошибка
Какая ? Куда и каким рейсом ?
← →
self.name © (2008-08-02 18:45) [31]> [30]
Access Violation
← →
Palladin © (2008-08-02 18:46) [32]да поди ерунду в параметре Buffer передает... как например в заголовке темы... нчм )
← →
Сергей М. © (2008-08-02 18:49) [33]
> self.name © (02.08.08 18:45) [31]
см. [17], [32]
← →
self.name © (2008-08-02 19:11) [34]всё) всем спасибо. сделал
function CopyData(ToStream:TStream):int64;//return OldPosition
var
mDataHeader:ToDataHeader;
begin
Result:=fTEST.Position;
fTEST.ReadBuffer(mDataHeader,SizeOf(mDataHeader));
ToStream.CopyFrom(fTEST,mDataHeader.Size);
end;
работает.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.042 c