Здравствуйте.
Такая проблема, взял кусок кода из экзамплов с книги
Закачка рекурсивная работает, только если я начинаю к примеру скачивать директорию с фтп сервера по путям
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 &)));
Помогите пожалуйста, как поправить...