Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 21.02.2019, 21:00   #1
MAKSIK21
 
Регистрация: 09.02.2019
Сообщений: 5
Репутация: 10
Сообщение Получить все файлы с ftp

Пытаюсь получить все файлы с сервера, выводит только 1 файл, хотя их там несколько и ошибку 6. Как решить проблему?
Код:

.586p
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/wininet.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/wininet.lib
.data
handl dd ?
hopen dd ?
hconnect dd ?
ipp db "192.168.1.1",0
namee db "admin",0
pswd db "admin",0
dirr db "/A/",0
find db "*",0
winn WIN32_FIND_DATAA<?>
findd dd ?
buf db 50 dup(0)
strr db "Error %lu",0
strrazd db 13,10,0
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov handl,eax
invoke  InternetOpenA,0,INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
cmp eax,0
je ERR
mov hopen,eax
invoke InternetConnectA,hopen,offset ipp,INTERNET_DEFAULT_FTP_PORT,offset namee,offset pswd,INTERNET_SERVICE_FTP,0,0
cmp eax,0
je ERR
mov hconnect,eax
invoke FtpSetCurrentDirectoryA,hconnect,offset dirr
invoke FtpFindFirstFileA,hconnect,offset find,offset winn,0,0
cmp eax,0
je ERR
mov findd,eax
METKA:
invoke InternetFindNextFileA, findd, offset winn
cmp eax,0
je ERR
invoke WriteConsoleA,handl, offset winn.cFileName,sizeof winn.cFileName,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
jmp METKA
ERR:
invoke GetLastError
push eax
push offset strr
push offset buf
call wsprintfA
invoke WriteConsoleA,handl,offset buf,sizeof buf,0,0
invoke Sleep,3000
invoke InternetCloseHandle,hconnect
invoke InternetCloseHandle,hopen
invoke ExitProcess,0
end start

MAKSIK21 вне форума   Ответить с цитированием
Старый 21.02.2019, 21:48   #2
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,664
Репутация: 1780
По умолчанию

Цитата:
Сообщение от MAKSIK21 Посмотреть сообщение
Как решить проблему
Например воспользоваться отладчиком.
waleri вне форума   Ответить с цитированием
Старый 23.02.2019, 21:22   #3
Ulex
Непрофессионал
Профессионал
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Адрес: город Н-ск.
Сообщений: 1,423
Репутация: 1104
По умолчанию

1 - Неинициализированные данные в соответствующую секцию .data?
2 - Вывод в консоль сделать как то так -
Код:

invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0


Это работает:
Код:

.586p
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/wininet.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/wininet.lib
.data?
handl dd ?
hopen dd ?
hconnect dd ?
winn WIN32_FIND_DATA<?>

.data
ipp db "*.*.*.*",0
namee db "********",0
pswd db "********",0
dirr db "/http/",0
find db "*", 0
findd dd 0
endlist	db "End find file"
buf db 50 dup(0)
strr db "Error %lu",0
strrazd db 00Dh, 00Ah
.code
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov handl,eax
invoke  InternetOpenA,0,INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
cmp eax,0
je ERR
mov hopen,eax
invoke InternetConnectA,hopen,offset ipp,INTERNET_DEFAULT_FTP_PORT,offset namee,offset pswd,INTERNET_SERVICE_FTP,0,0
cmp eax,0
je ERR
mov hconnect,eax
invoke FtpSetCurrentDirectoryA,hconnect,offset dirr
invoke FtpFindFirstFileA,hconnect,offset find,offset winn,0,0
cmp eax,0
je ERR
mov findd,eax
invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
METKA:
invoke InternetFindNextFileA, findd, offset winn
cmp eax,0
je ERR
invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
jmp METKA
ERR:
invoke GetLastError
push eax
push offset strr
push offset buf
call wsprintfA
invoke WriteConsoleA,handl,offset buf,sizeof buf,0,0
invoke InternetCloseHandle,hconnect
invoke InternetCloseHandle,hopen
invoke ExitProcess,0
end start

__________________
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума   Ответить с цитированием
Старый 23.02.2019, 23:38   #4
MAKSIK21
 
Регистрация: 09.02.2019
Сообщений: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ulex Посмотреть сообщение
1 - Неинициализированные данные в соответствующую секцию .data?
2 - Вывод в консоль сделать как то так -
Код:

invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0


Это работает:
Код:

.586p
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/wininet.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/wininet.lib
.data?
handl dd ?
hopen dd ?
hconnect dd ?
winn WIN32_FIND_DATA<?>

.data
ipp db "*.*.*.*",0
namee db "********",0
pswd db "********",0
dirr db "/http/",0
find db "*", 0
findd dd 0
endlist	db "End find file"
buf db 50 dup(0)
strr db "Error %lu",0
strrazd db 00Dh, 00Ah
.code
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov handl,eax
invoke  InternetOpenA,0,INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
cmp eax,0
je ERR
mov hopen,eax
invoke InternetConnectA,hopen,offset ipp,INTERNET_DEFAULT_FTP_PORT,offset namee,offset pswd,INTERNET_SERVICE_FTP,0,0
cmp eax,0
je ERR
mov hconnect,eax
invoke FtpSetCurrentDirectoryA,hconnect,offset dirr
invoke FtpFindFirstFileA,hconnect,offset find,offset winn,0,0
cmp eax,0
je ERR
mov findd,eax
invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
METKA:
invoke InternetFindNextFileA, findd, offset winn
cmp eax,0
je ERR
invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
jmp METKA
ERR:
invoke GetLastError
push eax
push offset strr
push offset buf
call wsprintfA
invoke WriteConsoleA,handl,offset buf,sizeof buf,0,0
invoke InternetCloseHandle,hconnect
invoke InternetCloseHandle,hopen
invoke ExitProcess,0
end start

Спасибо, все работает!
MAKSIK21 вне форума   Ответить с цитированием
Старый 23.02.2019, 23:39   #5
MAKSIK21
 
Регистрация: 09.02.2019
Сообщений: 5
Репутация: 10
По умолчанию

Ещё один вариант
Код:

.586p
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/wininet.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/wininet.lib
.data
handl dd ?
hopen dd ?
hconnect dd ?
ipp db "192.168.1.1",0
namee db "admin",0
pswd db "admin",0
dirr db "/A/",0
find db "*",0
winn WIN32_FIND_DATAA<?>
findd dd ?
buf db 50 dup(0)
strr db "Error %lu",0
strrazd db 13,10,0
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov handl,eax
invoke  InternetOpenA,0,INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
cmp eax,0
je ERR
mov hopen,eax
invoke InternetConnectA,hopen,offset ipp,INTERNET_DEFAULT_FTP_PORT,offset namee,offset pswd,INTERNET_SERVICE_FTP,0,0
cmp eax,0
je ERR
mov hconnect,eax
invoke FtpSetCurrentDirectoryA,hconnect,offset dirr
invoke FtpFindFirstFileA,hconnect,offset find,offset winn,0,0
cmp eax,0
je ERR
mov findd,eax
METKA:
push findd
invoke InternetFindNextFileA, findd, offset winn
pop findd
cmp eax,0
je ERR
invoke WriteConsoleA,handl, offset winn.cFileName,sizeof winn.cFileName,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
jmp METKA
ERR:
invoke GetLastError
push eax
push offset strr
push offset buf
call wsprintfA
invoke WriteConsoleA,handl,offset buf,sizeof buf,0,0
invoke Sleep,3000
invoke InternetCloseHandle,hconnect
invoke InternetCloseHandle,hopen
invoke ExitProcess,0
end start

MAKSIK21 вне форума   Ответить с цитированием
Старый 01.03.2019, 01:27   #6
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Адрес: Фергана
Сообщений: 1,272
Репутация: 1026
По умолчанию

Цитата:
Сообщение от MAKSIK21 Посмотреть сообщение
выводит только 1 файл, хотя их там несколько
Цитата:
Сообщение от Ulex Посмотреть сообщение
invoke lstrlen, offset [winn.cFileName]
интересно...
но как это может считать кучу файлов, не открывая их???
просто я с фтп никогда не сталкивался...
там что, все данные это один файл чтоли???
__________________
Нашедшего выход - затаптывают первым..
R71MT вне форума   Ответить с цитированием
Старый 01.03.2019, 17:19   #7
Ulex
Непрофессионал
Профессионал
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Адрес: город Н-ск.
Сообщений: 1,423
Репутация: 1104
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
но как это может считать кучу файлов, не открывая их???
просто я с фтп никогда не сталкивался...
там что, все данные это один файл чтоли???
Да не, это я про вывод в консоль написал.
Ищутся файлы по одному и названия найденных по одному выводятся в консоль.
Если сделать как у автора было изначально:
invoke WriteConsoleA,handl, offset winn.cFileName,sizeof winn.cFileName,0,0
то в консоль выведется весь буфер cFileName, а там не только имя файла, но и всякий хлам. Выглядит некрасиво. Вот я и предложил ограничить вывод в консоль именно длинной строки, а не длинной буфера.

Там сама проблема в том, что в cFileName выводится что то очень длинное. Вот откуда оно там берётся чёто ума не приложу, но это какой то хлам. И его много. Настолько много, что не влазит в поле cFileName структуры WIN32_FIND_DATAA. И начинает перетирать всё что ниже. А ниже дескриптор поиска. И поиску приходит каюк. Можно поменять местами объявления переменных winn WIN32_FIND_DATAA<?> и findd dd ? и тоже будет работать. Но это не решение проблемы. Понять бы чего туда такое пишется ????

P.S.
Кстати, если MAKSIK21 ещё появится. было бы интересно у него узнать, а как сама структура описана WIN32_FIND_DATAA ?
__________________
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 01.03.2019 в 18:37.
Ulex вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получить txt файлы komra2 C# (си шарп) 16 11.09.2015 22:40
Получить ссылки на файлы из папки linkoln_7 PHP 3 18.01.2015 22:11
Файлы.Дан символьный файл f. Получить копию файла в файле g (на Delphi) Zaraaa Помощь студентам 5 06.10.2013 21:42
Получить файлы с ПК, не имея монитора. Человек_Борща Железо 9 11.06.2013 18:55
Файлы. получить файл без повторных вхождений pavlintseva C++ Builder 2 14.03.2011 14:04


01:10.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru