Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите сделать копирование файла с сервера на лок. машину  (Прочитано 6073 раз)
0 Пользователей и 1 Гость смотрят эту тему.
JDRaveN
Гость
« : 28-08-2008 13:20 » 

Всем привет! Не могу сделать копирование! В примерах так много всего наворочено, а мне надо просто с одной кнопкой, нажал - скопировало. Помогите пожалуйста!
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 28-08-2008 15:07 » 

JDRaveN, рассказывай, что сделал, что не выходит и т.п.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #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
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #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;
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines