Программа на языке Visual Basic по автоматическому скачиванию файлов с FTP

Здесь я хочу представить исходный код программы по автоматическому скачиванию конкретного файла с фтп сервера, с использованием ini файла, который хранит настройки, программа написана в среде программирования Microsoft Visual Basic v 6.0.

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

Прежде чем переходить непосредственно к коду, давайте я сначала объясню саму инструкцию, которую выполняет программа, как Вы знаете ведь код программы это своего рода инструкция компьютеру, что ему нужно делать. Так вот, программа расположенная удаленно запускается по расписанию с помощью планировщика, подключается к FTP серверу, затем скачивает архив.rar, после того как она скачала, она сразу удаляет его с FTP (чтобы каждый день не качать), затем она отправляет на FTP текстовый файл, как бы лог, для того чтобы я знал, кто скачал этот файл, т.к. пользователей, которые подключаются к фтп много. Затем программа запускает батник, который и делает ту или иную задачу с этим файлом (код батника я показывать не буду, так как это и не нужно). Вот и все что делает моя программа, а забыл сказать, что все, что она делает, пользователь компьютера не видит, выполняется она в скрытом режиме, чтобы не отвлекать того оператора кто работает за компьютером, но Вы можете сделать так, чтобы она выполнялась в видимом режиме.

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

[General]
servname=IP FTP сервера
usern=логин
pwd=пароль
port=порт
file=D:\путь к файлу\имя того кто скачал.txt
name= имя того кто скачал.txt

Исходный код программы на Visual Basic

Затем открываем саму среду Microsoft Visual Basic v 6.0 и в код вставляем следующие:

Option Explicit
    Private Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" _
    (ByVal hFtpSession As Long, ByVal lpszFileName As String) As Boolean
    Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
    (ByVal sAgent As String, ByVal nAccessType As Long, ByVal sProxyName As String, _
    ByVal sProxyBypass As String, ByVal nFlags As Long) As Long
    Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
    (ByVal hInternetSession As Long, ByVal sServerName As String, _
    ByVal nServerPort As Integer, ByVal sUserName As String, _
    ByVal sPassword As String, ByVal nService As Long, ByVal dwFlags As Long, _
    ByVal dwContext As Long) As Long
    Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _
    (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _
    ByVal lpszRemoteFile As String, ByVal dwFlags As Long, _
    ByVal dwContext As Long) As Boolean
    Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
    (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _
    ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _
    ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _
    ByVal dwContext As Long) As Boolean
    Private Declare Function InternetCloseHandle Lib "wininet.dll" _
    (ByVal hInet As Long) As Integer
    Private Declare Function DeleteFile Lib "kernel32.dll" Alias "DeleteFileA" _
    (ByVal lpFileName As String) As Long
    Dim rc&
    Dim rs&
Private Sub Form_Load()
    Dim retval As Long
    Dim WinRarApp As String
    Dim iPath As String
    Dim iArhivName As String
    Dim adr As String
    rc& = InternetOpen("", 0, vbNullString, vbNullString, 0)
    rs& = InternetConnect(rc&, ReadIni("General", "servname"), "0", _
    ReadIni("General", "usern"), ReadIni("General", "pwd"), 1, 0, 0)
    If FtpGetFile(rs&, "архив.rar", "d:\путь\архив.rar", False, 0, 1, 0) = False Then End
    Call InternetCloseHandle(rs&)
    Call InternetCloseHandle(rc&)
    rc& = InternetOpen("", 0, vbNullString, vbNullString, 0)
    rs& = InternetConnect(rc&, ReadIni("General", "servname"), "0", _
    ReadIni("General", "usern"), ReadIni("General", "pwd"), 1, 0, 0)
    FtpDeleteFile rs&, "архив.rar"
    If FtpPutFile(rs&, ReadIni("General", "file"), _
    ReadIni("General", "name"), 1, 0) = False Then End
    Shell "D:\путь к батнику\имя батника.bat", vbHide
    End
End Sub

Это еще не все, необходимо еще добавить модуль со следующим содержанием:

   Private Declare Function WritePrivateProfileString Lib _
        "kernel32" Alias "WritePrivateProfileStringA" _
        (ByVal lpApplicationName As String, ByVal lpKeyName As String, _
        ByVal lpString As String, ByVal lpFileName As String) As Long
        Private Declare Function GetPrivateProfileString Lib "kernel32" _
        Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, _
        ByVal lpKeyName As String, ByVal lpDefault As String, _
        ByVal lpReturnedString As String, ByVal nSize As Long, _
        ByVal lpFileName As String) As Long

Public Sub SaveIni(Razdel As String, Param, znach)
        Call WritePrivateProfileString(Razdel, Param, znach, App.Path & "\test.ini")
End Sub

Public Function ReadIni(Razdel As String, Param) As String
        ReadIni = GetValue(Razdel, Param, App.Path & "\test.ini", "0")
End Function

Private Function GetValue(ByVal Section As String, ByVal Key As String, _
        ByVal fFileName As String, _
        Optional ByVal DefaultValue As String = vbNullString) As String
        Dim Data As String
        Data = String$(1000, Chr$(0))
        If GetPrivateProfileString(Section, Key, DefaultValue, Data, 1000, fFileName) > 0 Then
        GetValue = Left$(Data, InStr(Data$, Chr$(0)) - 1)
        Else
        GetValue = DefaultValue
        End If
        Exit Function
End Function

Теперь примерно объясню, что это значит. Все что идет между Option Explicit и Private Sub Form_Load() это объявление API функций которые мы используем. Затем идет код самой формы, в которой и используются эти API функции. В коде формы мы сначала выделяем память для переменных, потом уже идет непосредственно подключение к фтп, скачивание файла, удаление файла, отправка текстового файла и запуск батника. А код модуля нужен для того, чтобы наша программа могла быть привязана к ini файлу, и считывать из него параметры.

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

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.