Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];

Вниз

скачивание файлов из интернета   Найти похожие ветки 

 
bagos   (2008-02-08 23:59) [0]

не нашел нормальной информации о скачивании фалов с инета.
если не трудно киньте мыслю или ссылку.спасибо


 
palva ©   (2008-02-09 00:53) [1]

Не очень понятно, что такое нормальная информация. Если нормальная информация отсутствует, то скорее всего ваши понятия о норме превратны. Для начала объясните, что такое "файлы в инете". С некоторой натяжкой можно говорить о файлах, лежащих на сервере FTP. Но скорее всего вы не это имели ввиду.


 
Riply ©   (2008-02-09 01:42) [2]

> [1] palva ©   (09.02.08 00:53)
> Не очень понятно, что такое нормальная информация.

Это код, готовый к копи/пайстному использованию.
С Вашим опытом, пора бы знать такие элементарные вещи :)


 
Германн ©   (2008-02-09 01:49) [3]


> Riply ©   (09.02.08 01:42) [2]
>
> > [1] palva ©   (09.02.08 00:53)
> > Не очень понятно, что такое нормальная информация.
>
> Это код, готовый к копи/пайстному использованию.
> С Вашим опытом, пора бы знать такие элементарные вещи :)
>

С его опытом - это бред. Да и с моим тоже. Поскольку копипасты в наше время не было в продаже. :)))


 
Riply ©   (2008-02-09 01:54) [4]

> [3] Германн ©   (09.02.08 01:49)
> С его опытом - это бред. Да и с моим тоже.
> Поскольку копипасты в наше время не было в продаже. :)))

Тогда вам с palva, ну просто очень срочно, нужно изучать
новейшие и моднейшие технологии программирования :)


 
guav ©   (2008-02-09 01:56) [5]

http://msdn2.microsoft.com/en-us/library/aa384363.aspx
InternetOpen + InternetConnect + InternetReadFile + InternetCloseHandle. Мне этот вариант нравится тем, что код одинаковый для http и ftp. WinInet это не единствнный вариант, но как по мне самый простой.


 
guav ©   (2008-02-09 02:02) [6]

Точнее я имел в виду InternetOpenUrl вместо InternetConnect , тогда действительно четырёх функций хватит.


 
Германн ©   (2008-02-09 02:04) [7]


> Riply ©   (09.02.08 01:54) [4]

Пока мне это не нужно - мне это не нужно.
P.S. Не сочти это за тавтологию.


 
bagos   (2008-02-09 02:05) [8]

спасибо, уже разобрался как всегда ответ на поверхности был))

скачиваю за раз по 20 и более файлов. сделал ведение лога в листбоксе, но пока файлы скачивыаются нчиего в листбокс не добавляется только при завершении всех закачек! :( пробовал в отдельном потоке тоже ничего не дало. как решать подобную проблему? хотелось бы видеть лог в процессе выполнения


 
palva ©   (2008-02-09 08:53) [9]

guav ©   (09.02.08 01:56) [5]
Спасибо за ссылку. Надо посмотреть эти функции. Может быть они решат такие темные для меня вопросы как докачка, автоматическое использование кэширования - это если скачиваешь картинку, которую только что открыл в эксплорере, прогресс бар при скачивании очень большого файла и т. д. Я обычно такими вещами не заморачиваюсь поэтому пользуюсь одним вызовом функции
unit UrlMon
function URLDownloadToFile

> спасибо, уже разобрался как всегда ответ на поверхности был))
Не стоит благодарности. Мы рады за вас. Жаль, что наши скромные попытки поучаствовать в ваших проблемах, не были вознаграждены, и мы не только не получили информации о вашем ноу хау, но даже не удостоились общения.

> как решать подобную проблему? хотелось бы видеть лог в процессе выполнения
Обычно, чтобы при выполнении некоторой работы поток все же отвлекался на работу с пользовательскими контролами периодически выполняют
Application.ProcessMessages;
Может быть, и вам поможет вызов этого метода.


 
bagos   (2008-02-09 13:48) [10]

ах да, я не стал заморачиваться и решение нашел в использовании idhttp.(в данном случае меня мне все равно какая реализация, главное чтобы скачивал).
http:=TIdHTTP.Create(nil);
memor:=TMemoryStream.Create;
 http.Get(s+listbox2.Items[ListBox2.ItemIndex],memor);
 memor.Position:=0;
 memor.SaveToFile(GetCurrentDir+"\downloads\"+s+".txt");


palva, Application.ProcessMessages; я так и не понял куда это вставлять.
в цикл или в любое место ппрограммы. а может в поток?или в файл проекта?
Благодарю за ответы!


 
ketmar ©   (2008-02-09 13:56) [11]

>[10] bagos (2008-02-09 13:48:00)
для индейцев — антифриз нужон. по крайней мере раньше был нужон, сейчас не в курсе.

---
Understanding is not required. Only obedience.


 
bagos   (2008-02-09 14:27) [12]

что есть "антифриз"?


 
ketmar ©   (2008-02-09 14:34) [13]

>[12] bagos (2008-02-09 14:27:00)
пошуруй мышкой по поллитре с индейцами. если найдёшь IdAntiFreeze — это оно. если не найдёшь — значит, упразднили.

---
Understanding is not required. Only obedience.


 
bagos   (2008-02-09 14:55) [14]

Антифриз то что надо! спасибо за помощь!


 
guav ©   (2008-02-09 15:11) [15]

Прогрессбар при скачивании похоже у URLDownloadToFile прикрутить можно

unit DownWithProgress;

interface

uses Windows, ComObj, ActiveX, UrlMon;

function DownloadWithProgress(
   szURL: PChar;
   szFileName: PChar;
   parent: HWND): HRESULT;

implementation

const
 CLSID_ProgressDialog: TGUID = "{F8383852-FCD3-11d1-A6B9-006097DF5BD4}";

type
 IProgressDialog = interface(IUnknown)
   ["{EBBC7C04-315E-11d2-B62F-006097DF5BD4}"]
   function StartProgressDialog(
     hwndParent: HWND;
     punkEnableModless: IUnknown;
     dwFlags: DWORD;
     LpvResevered: Pointer): HRESULT; stdcall;
   function StopProgressDialog(): HRESULT; stdcall;
   function SetTitle(pwzTitle: PWideChar): HRESULT; stdcall;
   function SetAnimation(hInstAnimation: HMODULE; idAnimation: UINT): HRESULT; stdcall;
   function HasUserCancelled(): BOOL; stdcall;
   function SetProgress(dwCompleted: DWORD; dwTotal: DWORD): HRESULT; stdcall;
   function SetProgress64(ullCompleted: UInt64; ullTotal: UInt64): HRESULT; stdcall;
   function SetLine(dwLineNum: DWORD; pwzString: PWideChar;
     fCompactPath: BOOL; pvResevered: Pointer): HRESULT; stdcall;
   function SetCancelMsg(pwzCancelMsg: PWideChar; pvResevered: Pointer): HRESULT; stdcall;
   function Timer(dwTimerAction: DWORD; pvResevered: Pointer): HRESULT; stdcall;
 end;

const
 PROGDLG_NORMAL         = $00000000;
 PROGDLG_MODAL          = $00000001;
 PROGDLG_AUTOTIME       = $00000002;
 PROGDLG_NOTIME         = $00000004;
 PROGDLG_NOMINIMIZE     = $00000008;
 PROGDLG_NOPROGRESSBAR  = $00000010;

type
 TDownloadProgress = class(TInterfacedObject, IBindStatusCallback)
 private
   FDialog: IProgressDialog;
   FBininng: IBinding;
   FParent: HWND;
   FName: string;
 public
   constructor Create(Parent: HWND; Name: string);
 public
   function OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall;
   function GetPriority(out nPriority): HResult; stdcall;
   function OnLowResource(reserved: DWORD): HResult; stdcall;
   function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG;
     szStatusText: LPCWSTR): HResult; stdcall;
   function OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall;
   function GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall;
   function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc;
     stgmed: PStgMedium): HResult; stdcall;
   function OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall;
 end;

{ TDownloadProgress }

constructor TDownloadProgress.Create(Parent: HWND; Name: string);
begin
 FParent := Parent;
 FName := Name;
 FDialog := CreateComObject(CLSID_ProgressDialog) as IProgressDialog;
end;

function TDownloadProgress.GetBindInfo(out grfBINDF: DWORD;
 var bindinfo: TBindInfo): HResult;
begin
 grfBINDF := 0;
 Result := S_OK;
end;

function TDownloadProgress.GetPriority(out nPriority): HResult;
begin
 DWORD(nPriority) := THREAD_PRIORITY_NORMAL;
 Result := S_OK;
end;

function TDownloadProgress.OnDataAvailable(grfBSCF, dwSize: DWORD;
 formatetc: PFormatEtc; stgmed: PStgMedium): HResult;
begin
 Result := S_OK;
end;

function TDownloadProgress.OnLowResource(reserved: DWORD): HResult;
begin
 Result := S_OK;
end;

function TDownloadProgress.OnObjectAvailable(const iid: TGUID;
 punk: IInterface): HResult;
begin
 Result := S_OK;
end;

function TDownloadProgress.OnProgress(ulProgress, ulProgressMax,
 ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult;
begin
 FDialog.SetProgress(ulProgress, ulProgressMax);
 if FDialog.HasUserCancelled() then
   FBininng.Abort();
 Result := S_OK;
end;

function TDownloadProgress.OnStartBinding(dwReserved: DWORD;
 pib: IBinding): HResult;
begin
 FBininng := pib;
 FDialog.StartProgressDialog(0, nil, PROGDLG_MODAL or PROGDLG_AUTOTIME, nil);
 FDialog.SetTitle("Downloading");
 FDialog.SetLine(1, PWideChar(WideString(FName)), False, nil);
 Result := S_OK;
end;

function TDownloadProgress.OnStopBinding(hresult: HResult;
 szError: LPCWSTR): HResult;
begin
 FDialog.StopProgressDialog();
 Result := S_OK;
end;

function DownloadWithProgress(
   szURL: PChar;
   szFileName: PChar;
   parent: HWND): HRESULT;
begin
 Result := URLDownloadToFile(
   nil, szURL, szFileName, 0,
   TDownloadProgress.Create(parent, szURL) as IBindStatusCallback);
end;

end.


 
palva ©   (2008-02-09 15:15) [16]


> guav ©   (09.02.08 15:11) [15]

Вот спасибо, нравятся мне такие технологии.


 
bagos   (2008-02-09 16:13) [17]

guav, спасибо за вкуснятину


 
guav ©   (2008-02-09 20:38) [18]

> [16] palva ©   (09.02.08 15:15)
> [17] bagos   (09.02.08 16:13)

Только там проверить всё надо, это наскоро написаный пример.
И ещё проблема может быть здесь

> if FDialog.HasUserCancelled() then

проверяется  только в OnProgress, т.е. если скачка зависнет то отмена может перестать работать.



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

Форум: "Начинающим";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.049 c
15-1201632004
timeout
2008-01-29 21:40
2008.03.02
UUID компьютера


2-1202208254
031178
2008-02-05 13:44
2008.03.02
Код клавиши


2-1202528961
Dmitry S
2008-02-09 06:49
2008.03.02
освобождение памяти дин. массива


15-1201709960
TStas
2008-01-30 19:19
2008.03.02
Не работает php


2-1201860517
mrFreeman2007
2008-02-01 13:08
2008.03.02
Анализатор спектра





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский