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

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

02.07.2012, 13:14. Показов 15488. Ответов 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
Заблокирован
02.07.2012, 21:31
Лучший ответ Сообщение было отмечено как решение

Решение

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


И всякие компоненты ненужны ! ! ! !

Visual Basic
1
2
    1. If FtpGetFile(rs&, "index.htm", "D:\index.htm", False, 0, 1, 0) = False Then MsgBox "Îøèáêà ïîëó÷åíèÿ ôàéëà!", vbExclamation
    2. If FtpPutFile(rs&, "D:\index.htm", "index1.htm", 1, 0) = False Then MsgBox "Îøèáêà ïåðåäà÷è ôàéëà!", vbExclamation
1 Пример - получаем файл с именем и расширением index.htm с сервера и сохраняем D:\index.htm
2 Пример - отправляем файл с D:\index.htm на сервер в корневую папку с именем index1.htm
3
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409
03.07.2012, 00:45  [ТС]
Цитата Сообщение от inv.DS Посмотреть сообщение
FtpPutFile - Функция отправки файла !
FtpGetFile - Функция получения файла!
И всякие компоненты ненужны ! ! ! !
С использованием этой API функции у меня сам vb6 зависает а после вылетает, то бишь завершение программы, а файл не закачивается полностью, он как бы на сервер передает имя с нулевым весом (0 кб)
0
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409
03.07.2012, 00:55  [ТС]
... Т.е. отправляет на серве пустой файл с таким же именем

Даже если программу компилировать, нажимая на кнопку, через секунд 20-40 прога зависает и вылетает предварительно нажать на "Закрыть программу"
... Та же лажа с vb6
Миниатюры
Передача файла (файлов) по FTP  
0
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409
03.07.2012, 01:52  [ТС]
Я провел маленькие исследования и вот что получилось:

На моем компе стоит win7 64bit . Подключение по локальной сети ( Интернет 2мб/с) он не передавал файлы ни в какую как и через контрол msinet.ocx так и winApi (вылетал вместе с vb6)

Загрузил ноут (C Win7 32 bit), сунул 3G модем, стал проверять, winApi работает на ура и программа не вылетает, все файлы присылает целыми.

Что скажите?

Добавлено через 11 минут
P.S.
Позже проверил интернет соединение к ноуту интернет с основного компа. загрузил прогу, способ передачи WinApi вылетел. Теперь понимаю что дело в интернете, может надо что-то сделать?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
03.07.2012, 07:36
Цитата Сообщение от snyppimylt Посмотреть сообщение
может надо что-то сделать?
Проверить при помощи нормального клиента FTP ( к примеру встроенного в Total Commander) - а возможна ли работа в принципе с этого компьютера при этом соединении? Может твой провайдер блокирует доступ по 21 порту?
0
Заблокирован
03.07.2012, 07:52
Цитата Сообщение от snyppimylt Посмотреть сообщение
Что скажите?
Может в ссылке? Кстати если файл большой тогда надо что-то типа DoEvents, там или что-то типа этого...

Цитата Сообщение от snyppimylt Посмотреть сообщение
Загрузил ноут (C Win7 32 bit), сунул 3G модем, стал проверять, winApi работает на ура и программа не вылетает, все файлы присылает целыми.
Ну главное мой пример работает!!! Жду спасибо ))))
1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
03.07.2012, 12:28
Цитата Сообщение от inv.DS Посмотреть сообщение
Ну главное мой пример работает
А чем твой пример отличается от его примера? Вы оба используете FtpPutFile из состава wininet.dll. Различий нет ни каких.
0
Заблокирован
03.07.2012, 12:41
Цитата Сообщение от Pro_grammer Посмотреть сообщение
А чем твой пример отличается от его примера? Вы оба используете FtpPutFile из состава wininet.dll. Различий нет ни каких.
Его код и мой, разница в количестве и отсутствия компонента на форме и его привязки к проекту. Чистый API...

Добавлено через 3 минуты
Цитата Сообщение от snyppimylt Посмотреть сообщение
В скоре я понял что как ни как, но если кому то посылать программу то не у всех есть MSINET.ocx . поэтому я решил использовать API
Тут читай, а он не писал, что его проект не работал с его интернетом. А 3G работает мой, пусть пробует и свой. А вообще провайдер скорей всего блокирует 21 порт, оттуда и надо танцевать.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
03.07.2012, 14:10
Цитата Сообщение от inv.DS Посмотреть сообщение
разница в количестве и отсутствия компонента
Какие компоненты у него в коде? Читать то умеешь?
Цитата Сообщение от snyppimylt Посмотреть сообщение
не у всех есть MSINET.ocx . поэтому я решил использовать API :
Чистый API, и твой код повторяет его в точности! Сам то не видишь что ли?
0
Заблокирован
03.07.2012, 14:57
Ладно, сколько строчек кода он использовал чтобы достигнуть цели? И мой ниже?
0
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409
03.07.2012, 17:18  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Проверить при помощи нормального клиента FTP ( к примеру встроенного в Total Commander) - а возможна ли работа в принципе с этого компьютера при этом соединении? Может твой провайдер блокирует доступ по 21 порту?
А как я по вашему проверял что на сервер приходит пустой файл? уже проверил, там все работает.
Проверял, не помогает именно так. чтобы весь файл перекачался, даже если он весит 2 кб.




Цитата Сообщение от inv.DS Посмотреть сообщение
Может в ссылке? Кстати если файл большой тогда надо что-то типа DoEvents, там или что-то типа этого...
Пробовал, но это контроль над процессом передачи.

Добавлено через 3 минуты
Цитата Сообщение от inv.DS Посмотреть сообщение
Ладно, сколько строчек кода он использовал чтобы достигнуть цели? И мой ниже?
Чувак, дело не в коде. а в том, почему так работает, способ который я сколотил из примеров в интернете как и твой считая, работает на моей сети также.
0
Заблокирован
03.07.2012, 17:24
Ну странно, у меня прекрасно передает. Спрашивай провайдера, или может у тебя файрвол стоит или антивирус блокирует передачу.
0
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409
03.07.2012, 17:24  [ТС]
Цитата Сообщение от inv.DS Посмотреть сообщение
Ну странно, у меня прекрасно передает. Спрашивай провайдера, или может у тебя файрвол стоит или антивирус блокирует передачу.
Во общем я как понял вы сами не знаете.
0
Заблокирован
03.07.2012, 17:44
Блин, ты вроде бы писал, что у тебя там с 3G прекрасно работает? Я почем могу знать, почему у тебя не работает.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
03.07.2012, 18:51
Цитата Сообщение от snyppimylt Посмотреть сообщение
А как я по вашему проверял что на сервер приходит пустой файл?
Ну по разному можно, к примеру можно на FTP зайти через браузер. Кстати, у меня есть код, который работает именно по этому принципу - работает с FTP через Веббраузер.
0
 Аватар для snyppimylt
8 / 8 / 1
Регистрация: 18.12.2011
Сообщений: 409
03.07.2012, 18:54  [ТС]
Цитата Сообщение от inv.DS Посмотреть сообщение
Ну странно, у меня прекрасно передает. Спрашивай провайдера, или может у тебя файрвол стоит или антивирус блокирует передачу.
У меня он тоже работает, только при наличии модема 3G но не работы обычного интернета по LAn

Добавлено через 1 минуту
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Ну по разному можно, к примеру можно на FTP зайти через браузер. Кстати, у меня есть код, который работает именно по этому принципу - работает с FTP через Веббраузер.
Через браузер, я использовал Total Commander. Там то нормально передает но не с этой API функцией не выходит
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
11.09.2012, 02:25
Как на счет небольших файлов, может и нормально.
А с двоичными порядка 3 Мб у API-функции (или ее реализации) из поста № 2 проблемы.
Размер сильно отличается в большую сторону, содержимое файла имеет частями куски различий (бъет файл как при скачивании, так и при закачке на FTP).

Причину искать не стал. Воспользовался встроенными средствами без API и без References - от Filipe Lage (Asyncronous Download Control). Приаттачил.
Для сохранения файла использовал такую конструкцию:
Visual Basic
1
2
3
4
5
6
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextStream = FSO.CreateTextFile("e:\Test.xls")
TextStream.Write (myDownloads.SelectedItem.Tag)
TextStream.Close
Set TextStream = Nothing
Set FSO = Nothing
Это вставить в процедуру двойного клика.
Теперь размер файла и CRC совпадают.

+ также является наличие прогрессбара, возможность паралельной закачки, отсутствие фриза при закачке файла большего объема, возможность отмены задания, загрузка в ОЗУ, а не на диск.
Единственное, что не реализована отправка файла (нужно проверить - имеет ли этот контрол такой функционал).
Вложения
Тип файла: zip VB6_Native1982023222006.zip (14.8 Кб, 115 просмотров)
2
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
14.09.2012, 16:48
Разобрался с функциями API для передачи FtpGetFile и приема FtpPutFile бинарных файлов через FTP.
Там предпоследним параметром нужно ставить 0, а не 1, что означает константу FTP_TRANSFER_TYPE_UNKNOWN (FTP_TRANSFER_TYPE_BINARY).
MSDN.
1
Заблокирован
14.09.2012, 17:23
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.09.2012, 17:23
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru