Вверх ↑
Этот топик читают: Гость
Ответов: 1302
Рейтинг: 48
#1: 2011-01-02 13:02:09 ЛС | профиль | цитата
Подскажите пожалуйста, как можно просуммировать потоки. Стоит задача в конец .exe файла дописывать свои данные, используя его как контейнер. Элемент ActionWriteRead не подошел, т.к. он нормально записывает, но не считывает, обрезая данные когда размер дописанного текста превышает некий критический порог Кб (например, 400 кб). (может подскажете как пофиксить это? А так компонент удобный.)

Пока решил задачу так (см. аттач). Схема извлекает sample.exe хранящийся в ней и затем дописывает ему в конец текст. В этом можно убедиться открыв сгенерированный sample.exe в редакторе кода Hiasm.

Но в таком подходе есть недостаток пришлось 2 потока преобразовывать в строки, объединить их и затем опять преобразовать в поток. А если вместо текста я захочу добавить видео-файл весом в 700 мб? Явно будет неоправданным такое преобразование. Может кто знает как объединять потоки (склеивать вместе последовательно) "на лету"?


карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Разработчик
Ответов: 4698
Рейтинг: 426
#2: 2011-01-02 13:08:58 ЛС | профиль | цитата
А если так?
sumthreads.rar
Прошу прощения, забыл один линк, перезалил
карма: 10
0
файлы: 1sumthreads.rar [53.7KB] [171]
Ответов: 1302
Рейтинг: 48
#3: 2011-01-02 18:20:45 ЛС | профиль | цитата
Спасибо, Assasin, то что надо. [flood]Вы профессиональный Hiasm problem-killer [/flood] Вот схема для упаковки видео в exe файл, надо только поменять путь к своему видео в элементе FileStream:
------------ Дoбавленo в 14.45:
Хорошо бы такой компонент написать StreamAdder для объединения 2-х и более потоков в один..
------------ Дoбавленo в 18.20:
Нашел такой элемент - StreamPack, наверное лучше сделать это через него:

Пример из Helpa - для упаковки данных:



Add(MainForm,2953706,511,133)
{
Height=174
Caption="Stream pack"
}
Add(StreamPack,10340199,588,259)
{
DataCount=#4:text|6:number|
link(onPack,4481860:doEvent1,[])
link(text,6375422:Text,[(594,212)(573,212)])
link(number,4223354:Position,[(601,212)(636,212)])
}
Add(Button,5140504,532,259)
{
Left=310
Top=95
Caption="Save"
link(onClick,10340199:doPack,[])
}
Add(Label,8577940,721,203)
{
Left=48
Top=97
Width=49
Height=17
Caption="File name"
}
Add(Label,12358209,567,84)
{
Left=45
Top=12
Width=54
Height=17
Caption="Text value"
}
Add(Label,3999125,628,84)
{
Left=45
Top=40
Width=66
Height=17
Caption="Integer value"
}
Add(Edit,6375422,567,133)
{
Left=125
Top=10
Width=170
}
Add(TrackBar,4223354,630,133)
{
Left=125
Top=35
Width=170
Height=20
Max=20
link(onPosition,9753892:doText,[])
}
Add(Label,9753892,679,133)
{
Left=305
Top=40
Width=10
Height=17
Caption="0"
}
Add(Edit,16013048,679,203)
{
Left=125
Top=95
Width=170
Text="values.dat"
}
Add(FileStream,9551284,679,259)
{
Mode=1
AutoCopy=0
Point(doCopyFromStream)
link(FileName,16013048:Text,[])
}
Add(Hub,4481860,644,259)
{
link(onEvent1,9551284:doOpen,[])
link(onEvent2,9551284:doCopyFromStream,[(668,272)(668,279)])
}

Для распаковки:



Add(MainForm,8479364,56,105)
{
Height=174
Caption="Stream unpack"
}
Add(Button,5140504,56,161)
{
Left=310
Top=95
Caption="load"
link(onClick,4481860:doEvent1,[])
}
Add(Label,8577940,189,105)
{
Left=48
Top=97
Width=49
Height=17
Caption="File name"
}
Add(Label,12358209,294,112)
{
Left=45
Top=12
Width=54
Height=17
Caption="Text value"
}
Add(Label,3999125,355,112)
{
Left=45
Top=40
Width=66
Height=17
Caption="Integer value"
}
Add(Edit,6375422,294,161)
{
Left=125
Top=10
Width=170
link(Str,14221321:text,[(300,149)(236,149)(236,208)(195,208)])
}
Add(TrackBar,4223354,350,210)
{
Left=125
Top=35
Width=170
Height=20
Max=20
link(onPosition,9753892:doText,[])
}
Add(Label,9753892,399,210)
{
Left=305
Top=40
Width=10
Height=17
Caption="0"
}
Add(Edit,16013048,147,105)
{
Left=125
Top=95
Width=170
Text="values.dat"
}
Add(FileStream,9551284,147,161)
{
AutoCopy=0
link(onLoad,14221321:doUnPack,[])
link(FileName,16013048:Text,[])
}
Add(Hub,4481860,112,161)
{
link(onEvent1,9551284:doOpen,[])
}
Add(StreamUnPack,14221321,189,161)
{
DataCount=#4:text|6:number|
link(onUnPack,9914869:doEvent1,[])
}
Add(Hub,9914869,245,161)
{
link(onEvent1,6375422:doText,[])
link(onEvent2,1776441:doData,[(277,174)(277,216)])
}
Add(DoData,1776441,294,210)
{
link(onEventData,4223354:doPosition,[])
link(Data,14221321:number,[(300,202)(202,202)])
}

Справку хорошо переделали, теперь ее стоит перечесть прежде чем спрашивать... Извиняюсь за беспокойство..
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
файлы: 1sumthreads_video.rar [53.6KB] [208]
Разработчик
Ответов: 4698
Рейтинг: 426
#4: 2011-01-02 18:53:59 ЛС | профиль | цитата
Единственное что не забывай: нельзя подавать на точку StreamPack-а сам исполняемый файл: тогда он не будет запускаться (в самое начало результирующего файла тогда запишется размер этого exe, а не ожидаемый MZP<..>). Так же можешь еще попробовать Types (Вкладка "Работа с типами")
карма: 10
0
Ответов: 1302
Рейтинг: 48
#5: 2011-01-02 19:47:05 ЛС | профиль | цитата
Спасибо, Assasin, если не секрет, что нужно подавать на StreamPack чтоб потом запускалось? Или как..
------------ Дoбавленo в 19.47:
Types пробовал, че-то не вышло у меня..
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Разработчик
Ответов: 4698
Рейтинг: 426
#6: 2011-01-02 19:51:53 ЛС | профиль | цитата
Aziz писал(а):
Types пробовал, че-то не вышло у меня..

Схему, пожалуйста.
------------ Дoбавленo в 19.50:
Aziz писал(а):
Спасибо, Assasin, если не секрет, что нужно подавать на StreamPack чтоб потом запускалось? Или как..

Это невозможно
------------ Дoбавленo в 19.51:
Черт, тоже теперь не могу отправлять большие сообщения
карма: 10
0
Ответов: 8948
Рейтинг: 824
#7: 2011-01-02 20:01:57 ЛС | профиль | цитата
Assasin, [flood]Вы превысили установленное число ответов не заключённых вот в этих тегах [/flood]
карма: 19

0
Ответов: 1302
Рейтинг: 48
#8: 2011-01-02 20:36:41 ЛС | профиль | цитата
Схема уничтожена, потому что не вышло..))) Может позже попробую еще. А сейчас нашел в upload еще элемент OperationsCombinedFiles - вроде тоже делает похожее.
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Разработчик
Ответов: 4698
Рейтинг: 426
#9: 2011-01-03 12:25:03 ЛС | профиль | цитата
Aziz, если хочешь, могу сделать IC, по функциям схожий с ActionWriteRead, только без шифрования.
карма: 10
0
Гость
Ответов: 17029
Рейтинг: 0
#10: 2011-01-03 13:47:42 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2025-01-20 13:39:40
карма: 0

0
Ответов: 1302
Рейтинг: 48
#11: 2011-01-03 13:48:46 ЛС | профиль | цитата
[offtop]NetByNet - это был я.[/offtop]
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Разработчик
Ответов: 4698
Рейтинг: 426
#12: 2011-01-03 14:30:02 ЛС | профиль | цитата
Тест-схема внутри http://iassasin.narod.ru/Work/FRWIC.rar
P.S: форум тупит, не хочет заливать сюда
карма: 10
0
Ответов: 1302
Рейтинг: 48
#13: 2011-01-04 01:22:08 ЛС | профиль | цитата
Спасибо большое, попробую прикрутить к своей программе..
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)