Название: QFTP Отправлено: dread от Апрель 25, 2007, 09:06 Подскажите наиболее простой способ при помощи QFtp скачать файлы из папки по масске в каталог на диске - и совершить обратную операцию...
ftp->connectToHost(ftp_HOST,ftp_PORT); ftp->login(ftp_NAME,ftp_PASSWORD); далее чере ->list() ? и сигнал listInfo ? а при записи? ->put() ? если подкините примерчик работы с чтением / записью файлов на QFTP буду очень благодарен. Понимаю что вопрос наверное немного ламерский, просто не могу сам разобраться в этом классе.... добавлено спустя 2 часа 38 минут: Вроде разобрался... остался только один вопрос: как организовать передачу многих файлов? открываем - передаем - закрываем - открываем следующий?... повторить? добавлено спустя 1 час: в чем может быть проблема? пытаюсь скопировать файл на фтп сервер на сигнале завершения команды пут ловлю еррор с кодом 1 ??? добавлено спустя 29 минут: ftp1->connectToHost(ftp_HOST,ftp_PORT); ftp1->login(ftp_NAME,ftp_PASSWORD); ftp1->cd(".."); //ftp1->list(); QFile file("D:\\test.txt"); file.open(QIODevice::ReadOnly | QIODevice::Unbuffered); ftp1->put( &file , "test.txt" ); ftp1->close(); на выполнение этого кода получаю ошибку (на комманде put): отсылает к этой строче класса qFTP: if (c->data.dev->isSequential()) что он хочет этим сказать? почему я не могу произвести операцию записи??? добавлено спустя 43 минуты: почему команда put только создает пустой файл - затем рвет соединение? сообщая о том что мол все ок ? добавлено спустя 14 минут: ftp1->connectToHost(ftp_HOST,ftp_PORT); ftp1->login(ftp_NAME,ftp_PASSWORD); ftp1->setTransferMode(QFtp::Passive); file = new QFile("D:\\test.jpg"); ftp1->rawCommand("STOR D:\\test.jpg"); //file->open(QIODevice::ReadOnly); //ftp1->put( file , "nikola.jpg" ); //ftp1->get( "Ten.jpg" , file ); ftp1->close(); в чем возможня ошибка? почему чтение работает безупречно, в то время как запись на сервер создает пустой файл и рвет соединение... файл открыт для чтения... что может быть причиной такого поведения??? Название: QFTP Отправлено: dread от Апрель 26, 2007, 04:55 Неужели никто не работал с QFTP на закачку?
Название: QFTP Отправлено: dread от Апрель 27, 2007, 05:37 Разобрался сам, если кому интересно, пишите мне
Название: Re: QFTP Отправлено: BlackLagarto от Апрель 08, 2009, 23:29 Интересно послушать решение которое вы нашли...
Насколько я понимаю если я хочу залить на сервак кучу файлов то прежде чем послать следующий файл мне надо отследить загрузился ли предыдущий. Как это в коде реализовать или я в корне не прав? Название: Re: QFTP Отправлено: xintrea от Апрель 10, 2009, 17:25 Интересно послушать решение которое вы нашли... Насколько я понимаю если я хочу залить на сервак кучу файлов то прежде чем послать следующий файл мне надо отследить загрузился ли предыдущий. Как это в коде реализовать или я в корне не прав? Тоже хочу это узнать Название: Re: QFTP Отправлено: roginovicci от Апрель 27, 2009, 11:39 И я.
Хотя примерно понятно. Надо отлавливать сигналы, а саму загрузку запускать из нового треда. Поправте меня если я не прав. Название: Re: QFTP Отправлено: BlackLagarto от Май 02, 2009, 20:06 Алгоритм примерно следующий
1.Создаем очередь из файлов которые хотим закинуть на Фтп (ftp.put();) 2.Проверяем зугрузился ли файл 3.Кидаем следующий Название: Re: QFTP Отправлено: PunX от Июнь 05, 2009, 20:02 День добрый, столкнулся с проблемоя при копировании файлов на фтп
Код: void FtpWindow::uploadFile() { Название: Re: QFTP Отправлено: Krow от Июнь 08, 2009, 19:17 мне тоже интересно. как правильно закачать файл?? или никто не знает??
попытался экзамплы посмотреть... нифига оттуда не понял. Название: Re: QFTP Отправлено: ритт от Июнь 08, 2009, 19:32 Код: connect(upfile, SIGNAL(done(bool)), this, SLOT(close())); Название: Re: QFTP Отправлено: Krow от Июнь 10, 2009, 08:46 Код: ftp.abort(); Название: Re: QFTP Отправлено: BRE от Июнь 10, 2009, 09:18 Код: ... Все состояния сообщаются клиенту через сигналы. По моему, из названий сигналов и так все ясно. ;) Название: Re: QFTP Отправлено: ритт от Июнь 10, 2009, 09:30 мля, я для кого close закомментировал?!
Название: Re: QFTP Отправлено: Krow от Июнь 10, 2009, 09:40 я уже удалил закрытие из той части кода
dataTransferProgress() или commandFinished(). какой из этих сигналов нужно использовать? думаю что второй.. тока вот вопрос как его правильно пользовать??? Название: Re: QFTP Отправлено: Krow от Июнь 10, 2009, 13:30 попробовал сделать как у PunX.. проблема та же.. логинится. создает файл новый.. и фсё... и тишина..
Код: ftp.abort(); Константин... я щас не так часто обращаюсь за помощью, только то что действительно не знаю.. или не могу разобраться. был бы признателен если бы не ругались. не всё дается сразу Название: Re: QFTP Отправлено: BRE от Июнь 10, 2009, 13:41 попробовал сделать как у PunX.. проблема та же.. логинится. создает файл новый.. и фсё... и тишина.. Приконнектся к сигналам commandStarted, commandFinished и посмотри какие команды выполняются, проверяй состояние (сигнал stateChaged) и ошибки. Тогда поймешь в каком месте и по какой причине прерывается операция.P.S. И еще добавь проверку при открытии файла prays.cs, что-то мне подсказывает, что не открывается он... Название: Re: QFTP Отправлено: Krow от Июнь 12, 2009, 06:41 спасиб, BRE. действительно файл просто не открывался. щас всё заработало!
Название: Re: QFTP Отправлено: n. tr. от Июль 02, 2009, 11:30 Здравствуйте!
Есть очень простая задача - скачать с фтп файл. Делаю всё простым образом: Код
На выходе мой файл - пустой. Что я делаю не так? Название: Re: QFTP Отправлено: n. tr. от Июль 02, 2009, 11:53 Проблему вроде решил (не знаю, правильно ли).
Всё из-за того, что соединение происходит не мгновенно, поэтому файл закрывался раньше, чем заканчивала работу команда get. Название: Re: QFTP Отправлено: n. tr. от Июль 27, 2009, 13:06 ещё вопрос по сабжу.
у меня все сигналы commandFinished и commandStarted соеденены с соотв. слотом, самое интересное, что слот запускается только при командах set the transfer mode switch proxying on or off is working switch proxying, connectToHost() и login(), а мне очень нужно завершение команды list. Но не выходит. Кто-нибудь сталкивался? Название: Re: QFTP Отправлено: niXman от Июль 27, 2009, 15:12 Ну вы что, документацию не читаете?
1. логинимся. 2. открываем отправляемый файл. 3. отправляем. 4. ждем испускания сигнала "void commandFinished ( int id, bool error )" 5. Закрываем файл. это наскоро набросанный алгоритм. А правильный - нужно запоминать "id" каждой команды, посланной в QFtp. А знать его можно подключив к сигналу "QFtp::commandStarted ( int id )" слот. В примерах($(QTDIR)/examples/network/ftp) приведен исчерпывающий пример. Успехов. Название: Re: QFTP Отправлено: n. tr. от Июль 28, 2009, 14:29 документацию я прочитал. Проблема в том, что сигнал то ли не испускается, то ли не отлавливается. Кроме указанных, других сигналов нет, хотя команды, выполняются.
Мне нужна скачка файлов по шаблону, но выяснилось, что если какого-то из фалов нету, то не сумев его скачать функцией get() работа Qftp завершается. Варианта два: либо создавать новый объект QFtp для каждого файла, либо проверять наличие файлов в listInfo и редактировать шаблон. далее я думал, что в слот, соединённый с сигналом сommandFinished я помещу вызов функции скачки, если id будет равен QFtp::List. В итоге - фига. Лист завершается, а слот не вызывается не фига!!! Пришлось помещать скачку прямо в listInfo (и выглядит это кривовато, честно говоря). Кстати, niXman похоже не по моей проблеме высказался, ну ладно, не суть, там тоже ошибка. Закрывать нужно после сигнала done, а не commandFinished, потому что возможна ситуация как у меня, когда сигнал испущен не будет - для того же get у меня сигнал почему-то не испускается (ни commandStarted ни commandFinished). QT 4.4.3. Название: Re: QFTP Отправлено: Vexator от Август 21, 2009, 04:17 Код
прекрасно работает... просматриваем каталог, листим, формируем лист файлов для скачки (по заданному шаблону), качаем.. никогда проблем не было... Qt 4.2.3 |