Russian Qt Forum
Сентябрь 30, 2024, 18:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рекурсия ftp, уходит за директорию  (Прочитано 2005 раз)
B_u_R_n
Гость
« : Апрель 28, 2010, 13:14 »

Здравствуйте.
Такая проблема, взял кусок кода из экзамплов с книги
Закачка рекурсивная работает, только если я начинаю к примеру скачивать директорию с фтп сервера по путям
http://ftp://127.0.0.1/ftp/tmp/hello/
Прога выкачивает все что есть в hello переходит на диру выше, т.е. на http://ftp://127.0.0.1/ftp/tmp/ и качает от туда все так же рекурсивно
Вот код
Обработчик на кнопку аплоад
void FtpWindow::Download_Dir()
{
    QUrl url(ftpServerLineEdit->text());
   ftp1->connectToHost(url.host(), 21);
    ftp1->login();
    if(!ftp)
    {
        QMessageBox msgBox;
        msgBox.setText("Not connect");
        msgBox.exec();
    }
    else
    {
        flag=1;
        if(s1=='\0')
        {
            QMessageBox msgBox;
            msgBox.setText("Change dir.");
            msgBox.exec();
        }
        else
        {
            QString f=ftpServerLineEdit->text();
            int i=0;
            int p=0;
            QString sd=currentPath;
            QString g=fileList->currentItem()->text(0);
                while(f!='\0')
                i++;
            if(f[i-1]=='/')
            {
                    while(sd[p]!='\0')
                    f[i-1]=sd[p],p++,i++;
            }
                f=f+'/';
            f=f+g;
            qDebug()<<f;
            getDirectory(QUrl(f));
        }
    }
}
s1 это полный путь до файла/диры которую пользователь выбрал в меню QTreeWidget
bool FtpWindow::getDirectory(const QUrl &url)
{
    if (!url.isValid()) {
        qDebug()<< "Error: Invalid URL" << endl;
        return false;
    }

    if (url.scheme() != "ftp") {
        qDebug()<< "Error: URL must start with 'ftp:'" << endl;
        return false;
    }


    QString path = url.path();
    qDebug()<<path;
    if (path.isEmpty())
        path = "/";

    pendingDirs.append(path);
    processNextDirectory();
    return true;
}
void FtpWindow::processNextDirectory()
{
    if (!pendingDirs.isEmpty()) {
        currentDir = pendingDirs.takeFirst();
        currentLocalDir = "Donwload/"+currentDir;
        QDir(".").mkpath(currentLocalDir);

        ftp1->cd(currentDir);
        ftp1->list();
    } else {
        emit done();
    }
}
Обработчик на дон
void FtpWindow::ftpDone(bool error)
{
    if (error) {
        qDebug() << "Error: " << qPrintable(ftp1->errorString()) << endl;
    } else {
        flag=0;
        qDebug()<< "Downloaded " << qPrintable(currentDir) << " to "
             << qPrintable(QDir::convertSeparators(
                               QDir(currentLocalDir).canonicalPath()));
    }
    qDeleteAll(openedFiles);
    openedFiles.clear();
    processNextDirectory();
}
Обработчик на получение файлов
void FtpWindow::ftpListInfo(const QUrlInfo &urlInfo)
{
    if (urlInfo.isFile()) {
        if (urlInfo.isReadable()) {
            QFile *file = new QFile(currentLocalDir + "/"
                                    + urlInfo.name());

            if (!file->open(QIODevice::WriteOnly)) {
                qDebug() << "Warning: Cannot open file "
                     << qPrintable(
                            QDir::convertSeparators(file->fileName()))
                     << endl;
                return;
            }

            ftp1->get(urlInfo.name(), file);
            openedFiles.append(file);
        }
    } else if (urlInfo.isDir() && !urlInfo.isSymLink()) {
        pendingDirs.append(currentDir + "/" + urlInfo.name());
    }
}
Вот эти функции, сами обработчики
    connect(ftp1, SIGNAL(done(bool)), this, SLOT(ftpDone(bool)));
    connect(ftp1, SIGNAL(listInfo(QUrlInfo)),this, SLOT(ftpListInfo(const QUrlInfo &)));
Помогите пожалуйста, как поправить...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 20.