С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/78: Рейтинг темы: голосов - 78, средняя оценка - 4.95
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409

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

02.07.2012, 13:14. Показов 15492. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хотел передать файл по FTP с помощью Internet Transfer Control (MSINET.OCX), по началу получалось по этому примеру:
Visual Basic
1
2
3
4
5
6
With Inet1
 .URL = "ftp.name.ru"
 .UserName = "Login"
 .Password = "Pass"
 .Execute ,"PUT C:\113\text.txt /folder/text.txt" 
 End With
А потом он пересылал только образ файла, то бишь имя а сам файл пустой (0 кб). Почему???

В скоре я понял что как ни как, но если кому то посылать программу то не у всех есть MSINET.ocx . поэтому я решил использовать API :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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 Const INTERNET_SERVICE_FTP = 1
Private Const INTERNET_SERVICE_GOPHER = 2
Private Const INTERNET_SERVICE_HTTP = 3
 
Private Declare Function InternetCloseHandle _
   Lib "wininet.dll" (ByVal hInet As Long) As Integer
   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 Sub Form_Load()
 
hINetSession = InternetOpen("MyFTPClient", 0, vbNullString, vbNullString, 0)
 
hSession = InternetConnect(hINetSession, "ftp.name.ru", _
   "21", "login", "pass", INTERNET_SERVICE_FTP, 0, 0)
 
 
If FtpPutFile(hSession, "C:\113\text.txt", "/folder/text.txt", 1, 0) = False Then
   MsgBox "The call to FtpPutFile failed."
End If
 
 
End Sub
Этот пример API работает НО он тоже присылает пустой файл, к тому же если грузить через VB6, то компилятор вместе с ним виснит и вылетает.

Ребят, что мне делать?

Может что не так сделал?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.07.2012, 13:14
Ответы с готовыми решениями:

ftp передача файла
Научил железку программируемую на Basic ходить на фтп, кидать файлы, но, на одном фтп все ок, а на другом, при окончании передачи файла, он...

Передача файлов на FTP не зная полного пути, но зная имя и расширение файла
Всем привет знатокам Delphi, нужен ваш совет, суть в том, что надо передать файл на фтп находящийся в учетной записе пользователя, к...

Передача файлов по FTP
Все привет. Код соединения и передачи файла на FTP-сервер IdFTP1->Host = "хост фтп"; IdFTP1->Username = "Логин"; ...

27
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
14.01.2015, 10:20
Студворк — интернет-сервис помощи студентам
Добрый день Dragokas вы можете пояснить куда VB6_Native1982023222006.zip сохраняет файлы?

Добавлено через 26 минут
коллеги прошу помощи:


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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 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 InternetCloseHandle _
   Lib "wininet.dll" (ByVal hInet As Long) As Integer
   
     Private Const INTERNET_SERVICE_FTP = 1
 
 
 
Private Sub Form_Load()
  
  hINetSession = InternetOpen("MyFTPClient", 0, vbNullString, vbNullString, 0)
  hSession = InternetConnect(hINetSession, "ftp://oleksandrnosar.asuscomm.com", "21", "anonymous", "guest", INTERNET_SERVICE_FTP, 0, 0)
 
  
  If FtpGetFile(hSession, "ftp://oleksandrnosar.asuscomm.com/sda1/CopyFolder_For_HB5/ActualVer/verPrg.txt", "d:\verPrg.txt", False, 0, 1, 0) = False Then
   MsgBox "Call to FtpGetFile Failed!"
   End
  End If
  
  Call InternetCloseHandle(hSession)
  Call InternetCloseHandle(hINetSession)
  
End Sub
Все сделал по "иструкции". Файл не принимает.
Вчем может быть проблема?
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
23.02.2015, 11:46
Цитата Сообщение от Dragokas Посмотреть сообщение
Единственное, что не реализована отправка файла (нужно проверить - имеет ли этот контрол такой функционал).
Вложения
VB6_Native1982023222006.zip (14.8 Кб, 50 просмотров)
Добрый день!
Один из немногих работающих примеров.
Не подскажете как прикрутить сохранение на диск. Я вижу что он тянет файл, только не совсем понимаю куда...
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
23.02.2015, 16:53
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Почти тоже самое что тебе давал, только если ты немного включил голову, то смог бы переделать и на закачивание.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Option Explicit
 
Private Declare Function InternetCloseHandle Lib "wininet" (ByRef hInternet As Long) As Boolean
Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenW" (ByVal lpszAgent As Long, ByVal dwAccessType As Long, ByVal lpszProxy As Long, ByVal lpszProxyBypass As Long, ByVal dwFlags As Long) As Long
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectW" (ByVal hInternetSession As Long, ByVal sServerName As Long, ByVal nServerPort As Integer, ByVal sUserName As Long, ByVal sPassword As Long, ByVal lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function FtpOpenFile Lib "wininet.dll" Alias "FtpOpenFileW" (ByVal hFtpSession As Long, ByVal sBuff As Long, ByVal Access As Long, ByVal Flags As Long, ByVal Context As Long) As Long
Private Declare Function FtpGetFileSize Lib "wininet" (ByVal hFile As Long, ByRef lpdwFileSizeHigh As Long) As Long
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, lpBuffer As Any, ByVal dwNumberOfBytesToRead As Long, ByRef lpdwNumberOfBytesRead As Long) As Long
 
Private Const INTERNET_OPEN_TYPE_PRECONFIG  As Long = 0
Private Const INTERNET_DEFAULT_FTP_PORT     As Long = 21
Private Const INTERNET_SERVICE_FTP          As Long = 1
Private Const INTERNET_FLAG_RELOAD          As Long = &H80000000
Private Const INTERNET_FLAG_PASSIVE         As Long = &H8000000
Private Const GENERIC_READ                  As Long = &H80000000
Private Const FTP_TRANSFER_TYPE_BINARY      As Long = &H2
Private Const USERNAME                      As String = ""      ' Имя пользователя
Private Const PASSWORD                      As String = ""     ' Пароль
Private Const GRANULARITY                   As Long = &H10000
 
Private Sub cmdDownload_Click()
    Dim fileTitle   As String
    Dim offset      As Long
    Dim fileName    As String
    
    fileName = txtSourceFile.Text
    
    If Len(fileName) Then
        DownloadFile fileName, txtDstPath.Text & "\" & fileName, txtServerName
    End If
    
End Sub
 
' // Загрузить файл
Private Function DownloadFile(srcFile As String, dstPath As String, serverName As String) As Long
    Dim hInet   As Long
    Dim hFtp    As Long
    Dim hFile   As Long
    
    ' Инициализируем WinInet
    hInet = InternetOpen(StrPtr(App.ProductName), INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0)
    
    If hInet Then
        ' Открываем FTP сессию
        hFtp = InternetConnect(hInet, StrPtr(serverName), INTERNET_DEFAULT_FTP_PORT, _
                          StrPtr(USERNAME), StrPtr(PASSWORD), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0)
                                 
        If hFtp Then
            ' Создаем файл
            hFile = FtpOpenFile(hFtp, StrPtr(srcFile), GENERIC_READ, FTP_TRANSFER_TYPE_BINARY Or INTERNET_FLAG_RELOAD, 0)
    
            If hFile Then
                Dim fNum    As Integer
                Dim size    As Long
                Dim length  As Long
                Dim buf()   As Byte
                Dim numByt  As Long
                Dim totRed  As Long
                Dim retval  As Long
                ' Получаем размер файла, я не учитываю размер > 2GB
                length = FtpGetFileSize(hFile, retval)
                fNum = FreeFile
                size = length
                ReDim buf(GRANULARITY - 1)
                
                Open dstPath For Binary As fNum
                
                Do
                
                    If size > GRANULARITY Then
                        numByt = GRANULARITY
                    Else
                        numByt = size
                        ReDim buf(numByt - 1)
                    End If
                    
                    ' Читаем файл
                    retval = InternetReadFile(hFile, buf(0), numByt, totRed)
                    ' Проверяем статус
                    If retval = 0 Or numByt <> totRed Then
                        MsgBox "Error reading from file"
                        Exit Do
                    End If
                    
                    Put fNum, , buf()
                    
                    size = size - GRANULARITY
                    picProgress.Line (0, 0)-((length - size) / length, 1), vbRed, BF
                    DoEvents
                    
                Loop While size > 0
                
                Close fNum
                
                InternetCloseHandle hFile
                ' Успех
                DownloadFile = 1
                
            Else
                MsgBox "Error creating file"
            End If
            
            InternetCloseHandle hFtp
        Else
            MsgBox "Error connection"
        End If
        
        InternetCloseHandle hInet
    Else
        MsgBox "Initialize error"
    End If
 
End Function
Вложения
Тип файла: rar Downloader.rar (7.1 Кб, 21 просмотров)
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
23.02.2015, 17:10
Цитата Сообщение от The trick Посмотреть сообщение
Почти тоже самое что тебе давал, только если ты немного включил голову, то смог бы переделать и на закачивание.
Как вседа спасибо! Буду пробовать...
Удачи
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
23.02.2015, 17:24
Цитата Сообщение от The trick Посмотреть сообщение
Downloader.rar (7.1 Кб, 0 просмотров)
А можно пример заполнения полей?
А то у меня при любом раскладе ....
Миниатюры
Передача файла (файлов) по FTP  
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
23.02.2015, 17:27
Mega.jpg - тут имя файла в корневой папке FTP
ftp.thetrick.esy.es - тут сервер
D:\Temp\ - тут папка
Также нужно задать имя пользователя и пароль.
1
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
23.02.2015, 18:08
Цитата Сообщение от The trick Посмотреть сообщение
Также нужно задать имя пользователя и пароль.
так а если вход на сервер гостевой, т.е без запроса имени пользователя и пароля. Поля оставлять путыми?
Цитата Сообщение от The trick Посмотреть сообщение
Mega.jpg - тут имя файла в корневой папке FTP
ftp.thetrick.esy.es - тут сервер
D:\Temp\ - тут папка
Также нужно задать имя пользователя и пароль.
Спасибо, пошло...
в моем случае не нужно было писать ftp://, просто - 95.67.86.12

Добавлено через 16 минут
Напомните где лежит ТОЖЕ для Upload?
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
23.02.2015, 18:12
Цитата Сообщение от kreotodr Посмотреть сообщение
Напомните где лежит ТОЖЕ для Upload?
Вообще-то это твоя тема была.
Отправка/получение файлов на FTP с прогресс баром
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.02.2015, 18:12
Помогаю со студенческими работами здесь

Передача файлов по FTP
Я написал скрипт для передачи файлов по ftp: @echo off :res set addr=script echo.open хост&gt; %ADDR% echo.логин&gt;&gt; %ADDR% ...

Передача файлов через ftp
Доброго времени суток, очень прошу помогите с реализацией задачи, есть самописный ftp клиент, он постоянно следит за папкой на компьютере,...

Передача файлов на ftp сервер
Доброе утро, Программисты!!! Для проекта по распознаванию речи мне потребовалось начать учить C#(Только синтаксис, так как Pascal и...

Передача файлов на FTP-сервер
Сделал значит я cmd файл в нем прописал: Ftp -s:&quot;1.txt&quot; А в q.txt файле open xxxxx.ua xxxxx xxxxxx put 2.txt bye Ну...

FTP-сервер. Проверка доступности и передача файлов
Здравствуйте. Поставили мне тут задание средствами винды организовать FTP сервер и плановой передачей на него с удаленных машин. И если с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru