Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.13;
Скачать: CL | DM;

Вниз

многопотовый загрузчик файлов   Найти похожие ветки 

 
gedd ©   (2003-08-11 10:51) [0]

Кто нибудь знает как сделать многопотовый загрузчик файлов
компоненты idhttp idftp не подходят!


 
Reindeer Moss Eater ©   (2003-08-11 11:05) [1]

Чем же они не подходят?


 
Lahtak   (2003-08-11 12:18) [2]

лучше всего сделать через URLMON, у меня очень шустро работает,
или через WinInet


 
gedd ©   (2003-08-12 11:18) [3]

Поподробнее про URLMON пожалуйста!
лучше с кодом
через WinInet работает только коряво
например почему то в начальный момент
не определяет размер файла


 
Zelius ©   (2003-08-12 13:45) [4]


> Reindeer Moss Eater © (11.08.03 11:05) [1]

тем, что инди не умеет писать в середину потока, она почему-то считает себя вправве изменять размер файла на размер скачиваемого куска.


 
nikkie ©   (2003-08-12 14:09) [5]

>Zelius
ничего не понял... может ты тоже чего-то не умеешь?

>Lahtak
про urlmon я бы тоже послушал, только сдается мне, что это будет тот же WinInet. а недавно совсем обсуждали, что WinInet не позволяет использовать более 4 потоков.


 
Reindeer Moss Eater ©   (2003-08-12 14:13) [6]

> Reindeer Moss Eater © (11.08.03 11:05) [1]

тем, что инди не умеет писать в середину потока, она почему-то считает себя вправве изменять размер файла на размер скачиваемого куска.

Неужели? Вот не знал о таком несчастье. И как же я до сих пользовался этой библиотекой????


 
Zelius ©   (2003-08-12 17:42) [7]


> nikkie © (12.08.03 14:09) [5]

более того, чего-то я точно не умею :)
если ты знаешь, как двумя TidHTTP скачивать паралельно один файл, один с нуля до середины и второй с середины до конца, то поделись знанием!


 
Zelius ©   (2003-08-12 17:42) [8]


> Reindeer Moss Eater © (12.08.03 14:13) [6]

поедлись знанием, я так и не нашел ответа


 
nikkie ©   (2003-08-12 17:58) [9]

idhttp.request.from должен помочь. только у мя ощущение, у тя проблемы в другом, м что ты пытаешься паралельно в один файл с двух разных мест писать :))


 
Е-Моё имя ©   (2003-08-12 17:59) [10]

2 зелиус

посмотри лог регета, и будет тебе знание


 
Reindeer Moss Eater ©   (2003-08-12 18:17) [11]

Zelius © (12.08.03 17:42) [8]
> Reindeer Moss Eater © (12.08.03 14:13) [6]
поедлись знанием, я так и не нашел ответа


С тобой поделиться знанием как скачивать partial content, или как сохранять полученные байты в нужное место?

Или ты надеешся на существование магического метода у TidHTTP, "который_делает_как_тебе_надо"?


 
Zelius ©   (2003-08-12 20:23) [12]


> nikkie © (12.08.03 17:58) [9]

странные у тебя советы, интересно чем это мне мыло может помочь?


> Reindeer Moss Eater © (12.08.03 18:17) [11]

и то и то другое мне известно. Я говорю о том, что когда хочешь скачать кусок файла методом procedure TidHTTP.Get(AURL: string; const AResponseContent: TStream); overload;
то размер файла устанавливается в размер скачиваемого куска, что сильно мешает при многопотоковой скачки файла.


 
Palladin ©   (2003-08-12 20:48) [13]

тем же чем и мочалка...


 
Reindeer Moss Eater ©   (2003-08-13 09:25) [14]

> Reindeer Moss Eater © (12.08.03 18:17) [11]
Я говорю о том, что когда хочешь скачать кусок файла методом procedure TidHTTP.Get(AURL: string; const AResponseContent: TStream); overload;
то размер файла устанавливается в размер скачиваемого куска, что сильно мешает при многопотоковой скачки файла.


Да кто это тебе сказал? Школьный учитель пения что ли?


 
Reindeer Moss Eater ©   (2003-08-13 09:32) [15]

nikkie © (12.08.03 17:58) [9]
только у мя ощущение, у тя проблемы в другом, м что ты пытаешься паралельно в один файл с двух разных мест писать :))

Так он же надеется, что все экземпляры TidHTTP знают друг про друга все и работают слаженно без усилий сто стороны пользователя компонент.


 
Zelius ©   (2003-08-13 10:27) [16]


> Reindeer Moss Eater © (13.08.03 09:32) [15]

в отличии от тебя, похоже, я исходный код видел...


 
Reindeer Moss Eater ©   (2003-08-13 10:29) [17]

Zelius ©
в отличии от тебя, похоже, я исходный код видел...
Похвально.
Понял в нем что-нибудь?


 
Zelius ©   (2003-08-13 10:53) [18]


> Reindeer Moss Eater © (13.08.03 10:29) [17]

конечно, могу тебе объяснить ( хотя уже все и так объяснил, а ты не смог понять), а то ты бедняга смотришь в книгу и видишь фигу, только выеживаться и умеешь...


 
Reindeer Moss Eater ©   (2003-08-13 10:59) [19]

На, не плач. Может тоже что-нибудь увидишь.

var
Msg :string;
fStream :=TFileStream;
begin
Msg:="Я сильно заблуждался насчет библиотеки Indy"#13#10;
fStream:=TFileStream.Create("test.txt",fmOpenWrite);
fStream.WriteBuffer(Msg[1],Length(Msg));
IdHTTP1.Get(" http://www.delphimaster.ru/cgi-bin/forum.pl?n=4",fStream) ;
fStream.Free;
end;


 
Zelius ©   (2003-08-13 11:35) [20]


> Reindeer Moss Eater © (13.08.03 10:59) [19]

посмотри в конце размер файла и извинись...

procedure TForm1.Button1Click(Sender: TObject);
var
Msg: string;
fStream: TFileStream;
begin
Msg := "Я самый умный, потому что сам не пробовал, но думаю, что все должно работать так как Я хочу!"#13#10+
"Поэтому могу выпендриваться и раздовать дурацкие советы направо и налево, хотя сам никогда не пробовал так делать!"#13#10;

fStream := TFileStream.Create( "test.txt", fmCreate);
try
fStream.Size := 100000;
fStream.WriteBuffer( Msg[1], Length(Msg));
fStream.Position := 0;
IdHTTP1.Get( " http://www.delphimaster.ru/cgi-bin/forum.pl?n=4", fStream);
finally
fStream.Free;
end;
end;


 
Reindeer Moss Eater ©   (2003-08-13 11:41) [21]

посмотри в конце размер файла и извинись...

Посмотри на свой код, пойми что ты делаешь, и задумайся над своей способностью понимать советы старших.


 
Zelius ©   (2003-08-13 11:52) [22]


> Reindeer Moss Eater © (13.08.03 11:41) [21]

Я написал тот код, который мне нужен. Или ты считаешь, что многопоточная закачка файлов идет последовательно? Значит я не ошибся с написанным сообщением. Ладно, остынь, ты безнадежен, слушать старших, впавших досрочно в старческий маразм, не моё хобби.


 
Reindeer Moss Eater ©   (2003-08-13 11:54) [23]

Тебе был дан пример, показывающий, что
Get пишет в ResponseContent с текущей позиции в потоке назначения, ничего в нем не меняя.
Из этого еще не следует, что тебе советовали в разных потоках создавать FileStream на один и тот же файл.
Тебе давали понять, что запись в итоговый файл данных, полученных в разных нитках - это твоя забота, а не разработчиков компонент.
Собирай данные в памяти, и пиши поблочно в свой файл наздоровье, соблюдая нужные смещения.

Вот так-то, молодой человек без хобби.


 
Reindeer Moss Eater ©   (2003-08-13 12:00) [24]

тем, что инди не умеет писать в середину потока,

Так это Indy не умеет, или маленький ослик не умеет пользоваться Indy?


 
$hade ©   (2003-08-13 12:16) [25]

наверное все-таки 2е...
только все равно - злой ты какой-то...:-)


 
Reindeer Moss Eater ©   (2003-08-13 12:21) [26]

Я злой, но я вежливый по возможности.


 
Zelius ©   (2003-08-13 13:00) [27]


> Reindeer Moss Eater ©

Извини, ты злой и невежливый одновременно, плюс еще и невнимательный, поверь наслово...
А в середину потока как раз инди писать и не умеет, что я и доказал примером. Попробуй запусти, ты все поймешь... А для интереса, попробуй скачать не 10 Кб, а 10 Гб


 
Е-Моё имя ©   (2003-08-13 13:08) [28]

ну ты братец и тупица...

fStream.Position := 0;
не ты ли написал?


 
Reindeer Moss Eater ©   (2003-08-13 13:10) [29]

Внимательный и умный Zelius. Пойми одну простую истину.
Данные в твой файл пишет не Indy.
В твой файл данные пишет метод класса TFileStream.
Перед тобой виноваты разработчики класса TFileStream, а не разработчики Indy.

Попробуй запусти, ты все поймешь... А для интереса, попробуй скачать не 10 Кб, а 10 Гб

Я это делал, делаю, и еще долго буду делать и без твоих любезных предложений.


 
Zelius ©   (2003-08-13 13:14) [30]


> Е-Моё имя © (13.08.03 13:08) [28]

ну-ну, добро пожаловать в клуб не внимательных... тупиц ( хотя хотелось выразиться крепче), а то Reindeer Moss Eater там одному скушно наверное... если я так написал, значит мне это было нужно... представь себе, что второй кусок скачается первым, не знаю, способен ли ты на это...


 
Zelius ©   (2003-08-13 13:16) [31]


> Reindeer Moss Eater © (13.08.03 13:10) [29]

нет, ты все таки туповат от природы и ленив к тому же, если до сих пор не залез в исходники и не посмотрел как инди работает с потоком... У меня к тебе больше претензий нет, можешь не отвечать.


 
Reindeer Moss Eater ©   (2003-08-13 13:19) [32]

...если я так написал, значит мне это было нужно...

Долго смеялся.


 
Reindeer Moss Eater ©   (2003-08-13 13:22) [33]

Пишет так, как ему нужно, а работает так, как ему не нужно.
Любая шимпанзе в зоопарке уже давно бы догадалась попробовать сделать наоборот.


 
Zelius ©   (2003-08-13 13:26) [34]


> Reindeer Moss Eater © (13.08.03 13:22) [33]

это тебе соседи по клетке подсказали?
я давно обошел это ограничение.
Не смотря на нашу базарную ругань, факт остается фактом - инди не умеет писать в середину потока. Можешь брызгать... слюной сколько угодно, но ты это не изменишь. А началось все именно с этого утверждения...


 
Reindeer Moss Eater ©   (2003-08-13 13:28) [35]

инди не умеет писать в середину потока

Тебе русским языком сказали, что не Indy пишет туда.
Пишет метод класса конкретного потока, экземпляр которого передан методу Get.


 
Reindeer Moss Eater ©   (2003-08-13 13:29) [36]

Собирай данные в памяти, и пиши поблочно в свой файл наздоровье, соблюдая нужные смещения.

Вот это видел? Читал? Буквы понял?


 
nikkie ©   (2003-08-13 13:34) [37]

>Zelius
по поводу From вместо ContentRangeStart - виноват, ошибся. помнил, что это задается в Request, но быстрым взглядом промахнулся.

и все равно, проблемы твоей я не понимаю. речь идет о многопотоковой закачке? и ты хочешь, чтобы 2 потока (threads) писали в один поток (stream)?


 
Reindeer Moss Eater ©   (2003-08-13 13:35) [38]

"Ему так надо" :)


 
Zelius ©   (2003-08-13 15:52) [39]


> nikkie © (13.08.03 13:34) [37]

Да, скачиваю большой файл, открываю несколько файловых потоков на один файл и пишу прямо туда. С партиальной скачкой файлов у меня нет проблем, да у меня и вообще нету с этим проблем, все давно работает. Просто если бы Инди не выставляла размер потока как она это делает, то не пришлось бы рожать промежуточных буферов. Вот и все что я хотел сказать :)


 
Reindeer Moss Eater ©   (2003-08-13 15:54) [40]

Просто если бы Инди не выставляла размер потока как она это делает.

До парня никак не доходит, что это делает не Indy.



Страницы: 1 2 вся ветка

Текущий архив: 2003.10.13;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.026 c
1-40441
Ser_ega
2003-10-02 23:35
2003.10.13
Дата


3-40283
NorthMan
2003-09-22 17:56
2003.10.13
Подскажите, плз, как SQL-запросом выбрать данные


4-40745
Ghost
2003-08-05 11:14
2003.10.13
Возможно ли встроить окно чужого приложения в своё ?


3-40301
raper
2003-09-22 14:09
2003.10.13
Оракл


4-40732
Dest
2003-08-08 11:49
2003.10.13
Мешает чужая иконка в трее