Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
21 Июль 2025, 12:21:49
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Гродненский Форум > Компьютеры > Программирование
(Модераторы: Админ, barmalei) > Тема:

Delphi!!! Существует ли файл на FTP или в интернете?

Страниц  :   Вниз
  Печать  
Автор Тема: Delphi!!! Существует ли файл на FTP или в интернете?  (Прочитано 6675 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RaF-by
Гродненец
**

Репутация: +13/-0
Offline Offline

Предупреждения: у пользователя 1 предупреждение
Пол: Мужской
Сообщений: 91


Просмотр профиля Email
« : 24 Июнь 2010, 11:24:12 »

Всем привет! У меня такая проблема на работе - часто обрывается интернет на модеме и каждый раз приходиться его перезагружать в ручную! Хочу сделать прогу что бы она сама каждые 10 мин проверяла соединение с интернетом, а точнее мне нужно что бы искала определенный файл  на моем FTP сервере или на сайте (допустим картинку) и ели прога не будет находить этот файл, то прога будет давать модему команду перезагрузиться.
По сети это выглядит так:

procedure TForm1.Button1Click(Sender: TObject);
begin
if not  FileExists('c:\4024.jpg') then
   WinExec('C:\Modem\Modem.exe',1);
end;

а вот по интернету не хочет:

procedure TForm1.Button1Click(Sender: TObject);
begin
if not  FileExists('http://www.quarta.ru/img/products/small/BizTalk/bt_1.jpg') then
   WinExec('C:\Modem\Modem.exe',1);
end;

Помогите плиззз!
Записан
Ave
Гродненец
**

Репутация: +10/-0
Offline Offline

Пол: Мужской
Сообщений: 81


я - не море. меня не волнует..

Просмотр профиля
« Ответ #1 : 24 Июнь 2010, 14:44:38 »

ничем не помогу насчет delphi
но  хочу высказать свое скромное мнение, что это весьма сомнительный способ проверить есть ли соеденение с инетом
а что если ftp-сервер не доступен или файла из урла уже нет? скорее всего delphi все же предоставляет инструменты для более вразумительного решения проблемы... в гугле че-нить искал?
Записан

Жизнь - игра. Задумка хреновая, но графика за#бись.
Типичной ошибкой программиста на С++ является выбор С++ в качестве языка программирования
RILLey_ELf
Гость
« Ответ #2 : 24 Июнь 2010, 15:00:44 »

автор 1-2курсник и явно в гугле не искал

не уверен конечно, но почему то мне кажется, что FileExists работает только с локальными файлами (ну в самом крайнем случае с файлами SMB).
а вот как раз другие протоколы
должны поддерживаться другими способами.

я бы на вашем месте делал следующим образом:
1) скачал файл сторонней прогой (wget);
2) проверил его существование.

а на своём месте отправил бы http запросик и проверил 404
Записан
spammer
Почетный гродненец
*****

Репутация: +78/-19
Offline Offline

Пол: Мужской
Сообщений: 1455


Пыхнуть не хотите?

Просмотр профиля
« Ответ #3 : 24 Июнь 2010, 15:00:51 »

через winapi можно получить все сетевые коннекшены компа, дальше уже просто
пример тут: http://www.eggheadcafe.com/software/aspnet/33544773/detect-network-connection.aspx
подробности в msdn
Записан
spammer
Почетный гродненец
*****

Репутация: +78/-19
Offline Offline

Пол: Мужской
Сообщений: 1455


Пыхнуть не хотите?

Просмотр профиля
« Ответ #4 : 24 Июнь 2010, 15:10:46 »

http://stackoverflow.com/questions/325872/detect-an-internet-connection-activation-with-delphi
примеры на делфе, как ловить события подключения к сети и проверять стейт
Записан
RaF-by
Гродненец
**

Репутация: +13/-0
Offline Offline

Предупреждения: у пользователя 1 предупреждение
Пол: Мужской
Сообщений: 91


Просмотр профиля Email
« Ответ #5 : 24 Июнь 2010, 15:13:34 »

Всем спасибо!!! Мне подсказали решение как и что прописать!  Подмигивающий
Записан
iddqd
Лёдчег
Почетный гродненец
*****

Репутация: +170/-10
Offline Offline

Пол: Мужской
Сообщений: 2275


Не уйдешь!

Просмотр профиля
« Ответ #6 : 24 Июнь 2010, 17:02:40 »

я бы тупо пинговал что нибудь, например 8.8.8.8
Записан
Demik
Ты бЛондинКо - йА админ, Тибя много - йА адзын . Ты на кАпсЕ - я пАцтуЛом, щОлкну мышкой +1 :)
Кандидат в депутаты
****

Репутация: +703/-18
Offline Offline

Пол: Мужской
Сообщений: 3492


В России 2 беды,причем 1я постоянно ремонтирует 2ю

Просмотр профиля
« Ответ #7 : 02 Июль 2010, 21:50:55 »

еще как вариант можешь взять проверку отсюда:

Цитировать
Код:
uses 
  WinInet, ComCtrls;

function FtpDownloadFile(strHost, strUser, strPwd: string;
  Port: Integer; ftpDir, ftpFile, TargetFile: string; ProgressBar: TProgressBar): Boolean;

  function FmtFileSize(Size: Integer): string;
  begin
    if Size >= $F4240 then
      Result := Format('%.2f', [Size / $F4240]) + ' Mb'
    else
    if Size < 1000 then
      Result := IntToStr(Size) + ' bytes'
    else
      Result := Format('%.2f', [Size / 1000]) + ' Kb';
  end;

const
  READ_BUFFERSIZE = 4096;  // or 256, 512, ...
var
  hNet, hFTP, hFile: HINTERNET;
  buffer: array[0..READ_BUFFERSIZE - 1] of Char;
  bufsize, dwBytesRead, fileSize: DWORD;
  sRec: TWin32FindData;
  strStatus: string;
  LocalFile: file;
  bSuccess: Boolean;
begin
  Result := False;

  { Open an internet session }
  hNet := InternetOpen('Program_Name', // Agent
                        INTERNET_OPEN_TYPE_PRECONFIG, // AccessType
                        nil,  // ProxyName
                        nil, // ProxyBypass
                        0); // or INTERNET_FLAG_ASYNC / INTERNET_FLAG_OFFLINE

  {
    Agent contains the name of the application or
    entity calling the Internet functions
  }


  { See if connection handle is valid }
  if hNet = nil then
  begin
    ShowMessage('Unable to get access to WinInet.Dll');
    Exit;
  end;

  { Connect to the FTP Server }
  hFTP := InternetConnect(hNet, // Handle from InternetOpen
                          PChar(strHost), // FTP server
                          port, // (INTERNET_DEFAULT_FTP_PORT),
                          PChar(StrUser), // username
                          PChar(strPwd),  // password
                          INTERNET_SERVICE_FTP, // FTP, HTTP, or Gopher?
                          0, // flag: 0 or INTERNET_FLAG_PASSIVE
                          0);// User defined number for callback

  if hFTP = nil then
  begin
    InternetCloseHandle(hNet);
    ShowMessage(Format('Host "%s" is not available',[strHost]));
    Exit;
  end;

  { Change directory }
  bSuccess := FtpSetCurrentDirectory(hFTP, PChar(ftpDir));

  if not bSuccess then
  begin
    InternetCloseHandle(hFTP);
    InternetCloseHandle(hNet);
    ShowMessage(Format('Cannot set directory to %s.',[ftpDir]));
    Exit;
  end;

  { Read size of file }
  if FtpFindFirstFile(hFTP, PChar(ftpFile), sRec, 0, 0) <> nil then
  begin
    fileSize := sRec.nFileSizeLow;
    // fileLastWritetime := sRec.lastWriteTime
  end else
  begin
    InternetCloseHandle(hFTP);
    InternetCloseHandle(hNet);
    ShowMessage(Format('Cannot find file ',[ftpFile]));
    Exit;
  end;

  { Open the file }
  hFile := FtpOpenFile(hFTP, // Handle to the ftp session
                       PChar(ftpFile), // filename
                       GENERIC_READ, // dwAccess
                       FTP_TRANSFER_TYPE_BINARY, // dwFlags
                       0); // This is the context used for callbacks.

  if hFile = nil then
  begin
    InternetCloseHandle(hFTP);
    InternetCloseHandle(hNet);
    Exit;
  end;

  { Create a new local file }
  AssignFile(LocalFile, TargetFile);
  {$i-}
  Rewrite(LocalFile, 1);
  {$i+}

  if IOResult <> 0 then
  begin
    InternetCloseHandle(hFile);
    InternetCloseHandle(hFTP);
    InternetCloseHandle(hNet);
    Exit;
  end;

  dwBytesRead := 0;
  bufsize := READ_BUFFERSIZE;

  while (bufsize > 0) do
  begin
    Application.ProcessMessages;

    if not InternetReadFile(hFile,
                            @buffer, // address of a buffer that receives the data
                            READ_BUFFERSIZE, // number of bytes to read from the file
                            bufsize) then Break; // receives the actual number of bytes read

    if (bufsize > 0) and (bufsize <= READ_BUFFERSIZE) then
      BlockWrite(LocalFile, buffer, bufsize);
    dwBytesRead := dwBytesRead + bufsize;

    { Show Progress }
    ProgressBar.Position := Round(dwBytesRead * 100 / fileSize);
    Form1.Label1.Caption := Format('%s of %s / %d %%',[FmtFileSize(dwBytesRead),FmtFileSize(fileSize) ,ProgressBar.Position]);
  end;

  CloseFile(LocalFile);

  InternetCloseHandle(hFile);
  InternetCloseHandle(hFTP);
  InternetCloseHandle(hNet);
  Result := True;
end;
Записан

Sergey Loysha
Самый
Настоящий гродненец
****

Репутация: +79/-3
Offline Offline

Пол: Мужской
Сообщений: 532


Просмотр профиля
« Ответ #8 : 09 Июль 2010, 21:25:14 »

а не проще что-нибудь пинговать? любой сервер, типа ya.ru Улыбка
Записан
VooDoo
Почетный гродненец
*****

Репутация: +89/-1
Offline Offline

Пол: Мужской
Сообщений: 2885


Dum spiro spero

Просмотр профиля WWW Email
« Ответ #9 : 20 Июль 2010, 11:45:24 »

ну только не ya.ru
а по порядку из этого списка:
http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%80%D0%BD%D0%B5%D0%B2%D1%8B%D0%B5_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%8B_DNS
Записан

Are you human? - My body is.
Do you feel pain? - My body does.
..- --- --- -.. --- ---
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2025, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,133 секунд. Запросов: 19.