Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Обновление файла через интернет


Автор: ivan219 25.2.2006, 01:32
Вобщем хочг зделать обновление через инет чтоб незаходить на сайт и не смотреть появилась новая версия файли или нет а просто нажал на кнопку и если появилось окно что новая версия есть то загзить её а если нет то нет как это можно реализовать smile

Автор: Pakshin A. S. 25.2.2006, 11:38
Для тех, кто хочет все делать самостоятельно (без помощи сторонних компонентов), есть модуль WinInet, который позволяет работать с файлами через HTTP и FTP. Немного поискав по форуму, можно найти примеры скачивания файла с сервера.

Как узнать, что есть обновление? Как вариант: первые n-байт или символы до определенного "разделителя" будут указывать версию файла. Программа на компьютере пользователя всегда должна знать с какой версией файла она работает. Отсюда всегда можно узнать появилась ли новая версия файла, а именно сравнить текущую версию файла с прояитанным заголовком файла с сервера. Загружая файл с сервера на машину пользователя, следует проигнорировать версию, т. е. первые n-байт или символы до "разделителя", включая его самого.

Автор: Guedda 25.2.2006, 12:10
Вот тебе:
Код

function GetInetFile(fileURL, FileName : string) : boolean;
const
  BufferSize = 1024;
var
  hSession, hURL : HInternet;
  Buffer : array[1..BufferSize] of byte;
  BufferLen : DWORD;
  f : file;
  sAppName : string;
  Path : string;

function IsConnectedToInternet: Boolean; // проверяет, есть ли соединение с интернетом.
var
  dwConnectionTypes: DWORD;
begin
  dwConnectionTypes :=
    INTERNET_CONNECTION_MODEM +
    INTERNET_CONNECTION_LAN +
    INTERNET_CONNECTION_PROXY;
  Result := InternetGetConnectedState(@dwConnectionTypes, 0);
end;

begin
  Result := false;
  if not IsConnectedToInternet then begin
    MessageDlg('Нет соединения с интернетом!', mtWarning, [mbOk], 0);
    Exit;
  end;
  GetDir(0, Path);
  sAppName := ExtractFileName(Path + '\MyProg.exe');
  hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    hURL := InternetOpenURL(hSession,
    PChar(fileURL),
    nil,0,0,0);
    try
      AssignFile(f, FileName);
      Rewrite(f,1);
      repeat
        InternetReadFile(hURL, @Buffer,
        SizeOf(Buffer), BufferLen);
        BlockWrite(f, Buffer, BufferLen)
      until
        BufferLen = 0;
      CloseFile(f);
      Result:=True;
    finally
      InternetCloseHandle(hURL)
    end;
  finally
    InternetCloseHandle(hSession)
  end;
end;

Автор: ivan219 26.2.2006, 03:52
Да попробую.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)