Передача файла (файлов) по FTP - VB

Узнай цену своей работы

Формулировка задачи:

Хотел передать файл по FTP с помощью Internet Transfer Control (MSINET.OCX), по началу получалось по этому примеру:
Листинг программы
  1. With Inet1
  2. .URL = "ftp.name.ru"
  3. .UserName = "Login"
  4. .Password = "Pass"
  5. .Execute ,"PUT C:\113\text.txt /folder/text.txt"
  6. End With
А потом он пересылал только образ файла, то бишь имя а сам файл пустой (0 кб). Почему??? В скоре я понял что как ни как, но если кому то посылать программу то не у всех есть MSINET.ocx . поэтому я решил использовать API :
Листинг программы
  1. Private Declare Function InternetOpen _
  2. Lib "wininet.dll" Alias "InternetOpenA" ( _
  3. ByVal sAgent As String, _
  4. ByVal nAccessType As Long, _
  5. ByVal sProxyName As String, _
  6. ByVal sProxyBypass As String, _
  7. ByVal nFlags As Long) As Long
  8. Private Declare Function InternetConnect _
  9. Lib "wininet.dll" Alias "InternetConnectA" ( _
  10. ByVal hInternetSession As Long, _
  11. ByVal sServerName As String, _
  12. ByVal nServerPort As Integer, _
  13. ByVal sUserName As String, _
  14. ByVal sPassword As String, _
  15. ByVal nService As Long, _
  16. ByVal dwFlags As Long, _
  17. ByVal dwContext As Long) As Long
  18. Private Const INTERNET_SERVICE_FTP = 1
  19. Private Const INTERNET_SERVICE_GOPHER = 2
  20. Private Const INTERNET_SERVICE_HTTP = 3
  21. Private Declare Function InternetCloseHandle _
  22. Lib "wininet.dll" (ByVal hInet As Long) As Integer
  23. Private Declare Function FtpPutFile _
  24. Lib "wininet.dll" Alias "FtpPutFileA" ( _
  25. ByVal hFtpSession As Long, _
  26. ByVal lpszLocalFile As String, _
  27. ByVal lpszRemoteFile As String, _
  28. ByVal dwFlags As Long, _
  29. ByVal dwContext As Long) As Boolean
  30. Private Sub Form_Load()
  31. hINetSession = InternetOpen("MyFTPClient", 0, vbNullString, vbNullString, 0)
  32. hSession = InternetConnect(hINetSession, "ftp.name.ru", _
  33. "21", "login", "pass", INTERNET_SERVICE_FTP, 0, 0)
  34.  
  35. If FtpPutFile(hSession, "C:\113\text.txt", "/folder/text.txt", 1, 0) = False Then
  36. MsgBox "The call to FtpPutFile failed."
  37. End If
  38.  
  39. End Sub
Этот пример API работает НО он тоже присылает пустой файл, к тому же если грузить через VB6, то компилятор вместе с ним виснит и вылетает. Ребят, что мне делать? Может что не так сделал?

Решение задачи: «Передача файла (файлов) по FTP»

textual
Листинг программы
  1. Option Explicit
  2. 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
  3. 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
  4. 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
  5. 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
  6. Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
  7. Dim rc&
  8. Dim rs&
  9.  
  10.  
  11. Private Sub Command1_Click()
  12.     rc& = InternetOpen("", 0, vbNullString, vbNullString, 0)
  13.     rs& = InternetConnect(rc&, "ftp.narod.ru", "21", "ЛОГИН", "ПАРОЛЬ", 1, 0, 0)
  14.     'If FtpGetFile(rs&, "ИМЯ ФАЙЛА НА СЕРВЕРЕ + РАСШИРЕНИЕ", "КУДА СОХРАНИТЬ + ИМЯ ФАЙЛА И РАСШИРЕНИЕ", False, 0, 1, 0) = False Then MsgBox "Ошибка получения файла!", vbExclamation
  15.    If FtpPutFile(rs&, "ОТКУДА ОТПРАВИТЬ ФАЙЛ + ЕГО ИМЯ И РАСШИРЕНИЕ", "КУДА СОХРАНИТЬ + ИМЯ ФАЙЛА И РАСШИРЕНИЕ", 1, 0) = False Then MsgBox "Ошибка отправки файла!", vbExclamation
  16.     Call InternetCloseHandle(rs&)
  17.     Call InternetCloseHandle(rc&)
  18. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут