JDRaveN
Гость
|
|
« : 28-08-2008 13:20 » |
|
Всем привет! Не могу сделать копирование! В примерах так много всего наворочено, а мне надо просто с одной кнопкой, нажал - скопировало. Помогите пожалуйста!
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #1 : 28-08-2008 15:07 » |
|
JDRaveN, рассказывай, что сделал, что не выходит и т.п.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
zubr
Гость
|
|
« Ответ #2 : 28-08-2008 16:14 » |
|
Вот код из DRKB использующий WinInet-функции: function DownloadFile(const Url: string): string; var NetHandle: HINTERNET; UrlHandle: HINTERNET; Buffer: array[0..1024] of char; BytesRead: cardinal; begin Result := ''; NetHandle := InternetOpen('My application', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(NetHandle) then begin
UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle) then { UrlHandle правильный? Начинаем загрузку } begin FillChar(Buffer, SizeOf(Buffer), 0); repeat Result := Result + Buffer; FillChar(Buffer, SizeOf(Buffer), 0); InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead); until BytesRead = 0; InternetCloseHandle(UrlHandle); end else begin { UrlHandle неправильный. Генерируем исключительную ситуацию. } raise Exception.CreateFmt('Cannot open URL %s', [Url]); end;
InternetCloseHandle(NetHandle); end else { NetHandle недопустимый. Генерируем исключительную ситуацию } raise Exception.Create('Unable to initialize Wininet'); end;
Но данный код предполагает обычное соединение (без прокси-сервера) по HTTP-протоколу. Не учитывает многих нюансов.
|
|
|
Записан
|
|
|
|
JDRaveN
Гость
|
|
« Ответ #3 : 29-08-2008 07:49 » |
|
Код который прислал Zubr, наверняка работает и он то мне и нужен, т.к. файл лежит на сайте. Я не могу разобраться в этом коде, не такой я хороший программист, но сделать эту беду надо.
Я сделал форму на ней поместил кнопку, на событие OnClick прописал вот такую беду: begin IBDataBase1.Connected:=False; Windows.CopyFile('C:\Documents and Settings\Евгений Хомич\Рабочий стол\TERROR.GDB', 'C:\TERROR\Baza\TERROR.GDB',False); IBDataBase1.Connected:=True; end;
ну это для теста на локальной машине, работает, а как вот правильно прописать, чтобы с сайта подсасывал не знаю.
|
|
|
Записан
|
|
|
|
JDRaveN
Гость
|
|
« Ответ #4 : 29-08-2008 08:07 » |
|
Zubr HELP!!!
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #5 : 29-08-2008 09:21 » |
|
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, wininet, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
function DownloadFile(const Url: string; stream: TMemoryStream): boolean; var NetHandle: HINTERNET; UrlHandle: HINTERNET; Buffer: array[0..1024] of char; BytesRead: cardinal; begin Result := False; NetHandle := InternetOpen('My application', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(NetHandle) then begin
UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle) then { UrlHandle правильный? Начинаем загрузку } begin FillChar(Buffer, SizeOf(Buffer), 0); repeat FillChar(Buffer, SizeOf(Buffer), 0); InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead); stream.Write(Buffer, BytesRead); until BytesRead = 0; InternetCloseHandle(UrlHandle); end else begin { UrlHandle неправильный. Генерируем исключительную ситуацию. } raise Exception.CreateFmt('Cannot open URL %s', [Url]); exit; end;
InternetCloseHandle(NetHandle); end else { NetHandle недопустимый. Генерируем исключительную ситуацию } begin raise Exception.Create('Unable to initialize Wininet'); exit; end; Result := True; end;
procedure TForm1.Button1Click(Sender: TObject); var ms: TMemoryStream; begin ms := TMemoryStream.Create; try If not DownloadFile('http://MyUrl/MyInternetFile', ms) then exit; ms.SaveToFile('c:\MyLocalFile'); finally ms.Free; end; end;
end.
Читать книжки и учиться, учиться и учиться...
|
|
|
Записан
|
|
|
|
JDRaveN
Гость
|
|
« Ответ #6 : 03-09-2008 07:14 » |
|
Я немного подредактировал код, для визуализации обновления. function DownloadFile(const Url: string; stream: TMemoryStream): boolean; var NetHandle: HINTERNET; UrlHandle: HINTERNET; Buffer: array[0..1024] of char; BytesRead: cardinal; begin Result := False; NetHandle := InternetOpen('MainProject.exe', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(NetHandle) then begin
UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle) then { UrlHandle правильный? Начинаем загрузку } begin FillChar(Buffer, SizeOf(Buffer), 0); repeat FillChar(Buffer, SizeOf(Buffer), 0); InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead); stream.Write(Buffer, BytesRead); until BytesRead = 0; InternetCloseHandle(UrlHandle); end else begin { UrlHandle неправильный. Генерируем исключительную ситуацию. } raise Exception.CreateFmt('Cannot open URL %s', [Url]); exit; end;
InternetCloseHandle(NetHandle); end else { NetHandle недопустимый. Генерируем исключительную ситуацию } begin raise Exception.Create('Unable to initialize Wininet'); exit; end; Result := True; end;
procedure TfrmMain.Button5Click(Sender: TObject); var ms: TMemoryStream; begin
ms := TMemoryStream.Create; try If not DownloadFile('http://...', ms) then begin exit; ShowMessage('Ошибка!'); end; IBDataBase1.Connected:=False; ms.SaveToFile('C:\'); ShowMessage('Обновление успешно выполнено!'); IBDataBase1.Connected:=True; finally ms.Free; end; end;
|
|
|
Записан
|
|
|
|
|