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

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

02.07.2012, 13:14. Показов 15613. Ответов 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
18031 / 7734 / 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
18031 / 7734 / 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru