PDA

View Full Version : error:Failed to change directory



sups
22nd February 2011, 11:03
hiii,
as per ur reply i tried. program works normally even it downloads the directories and files but no contents are downloaded only empty folders are stored. in my program file supri.c which is readable is downloaded as supri.c empty folder no contents. am not getting why this is happening???
also after running it gives error as

Starting /home/supriya/FinalYr_Prjct/abc/abc...
Error: Changing directory failed:
Failed to change directory.
/home/supriya/FinalYr_Prjct/abc/abc exited with code 0

what is this error and how to remove?? plz help me out...

source code:


------------main.c--------------
#include <QtGui/QApplication>
#include <iostream>
#include "client.h"

using namespace std;


/*int main(int argc, char *argv[])
{
QApplication a(argc, argv);
client w;
w.show();
return a.exec();
}*/


int main(int argc, char *argv[])
{
argc = 2;
//*argv ="ftp://qt.nokia.com";
QCoreApplication app(argc, argv);
QStringList args = app.arguments();
if (args.count() != 2) {
cerr << "Usage: spider url" << endl
<< "Example:" << endl
<< "spider ftp://ftp.trolltech.com/freebies/leafnode"<< endl;
return 1;
}

Spider spider;
if (!spider.getDirectory(QUrl("ftp://localhost/supriya/supri.c")))
return 1;
QObject::connect(&spider, SIGNAL(done()), &app, SLOT(quit()));
return app.exec();
}

-----------------client.cpp-------------

#include "client.h"
#include <iostream>
using namespace std;
client::client(QWidget *parent)
: QWidget(parent)
{

}
client::~client()
{

}

Spider::Spider(QObject *parent)
: QObject(parent)
{
connect(&ftp, SIGNAL(done(bool)), this, SLOT(ftpDone(bool)));
connect(&ftp, SIGNAL(listInfo(const QUrlInfo &)),
this, SLOT(ftpListInfo(const QUrlInfo &)));
}

bool Spider::getDirectory(const QUrl &url)
{
if (!url.isValid()) {
cerr << "Error: Invalid URL" << endl;
return false;
}

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

ftp.connectToHost(url.host(), url.port(21));
ftp.login(tr("supriya"),tr("supriya"));
QString path = url.path();
if (path.isEmpty())
path = "/";
pendingDirs.append(path);
processNextDirectory();
return true;
}

void Spider::processNextDirectory()
{
if(!pendingDirs.isEmpty()) {

currentDir = pendingDirs.takeFirst();
currentLocalDir = "downloads/" + currentDir;
QDir(".").mkpath(currentLocalDir);
ftp.cd(currentDir);
ftp.list(currentDir);
}else
emit done();

}


void Spider::ftpListInfo(const QUrlInfo &urlInfo)
{
cout << "list info"<< endl;
if (urlInfo.isFile()) {
if (urlInfo.isReadable()) {
QFile *file = new QFile(currentLocalDir + "/"+ urlInfo.name());
if (!file->open(QIODevice::WriteOnly)) {
cerr << "Warning: Cannot open file "
<< qPrintable(

QDir::convertSeparators(file->fileName()))
<< endl;
return;
}
ftp.get(urlInfo.name(), file);
openedFiles.append(file);
}
} else if (urlInfo.isDir() && !urlInfo.isSymLink()) {
pendingDirs.append(currentDir + "/" + urlInfo.name());
}
}

void Spider::ftpDone(bool error)
{

if (error) {
cerr << "Error: " << qPrintable(ftp.errorString()) << endl;
} else {
cout << "Downloaded " << qPrintable(currentDir) << " to "<<
qPrintable(QDir::convertSeparators(QDir(currentLoc alDir).canonicalPath()));
}
qDeleteAll(openedFiles);
openedFiles.clear();
processNextDirectory();
}

-----------------------client.h-----------------------

#ifndef CLIENT_H
#define CLIENT_H
#include <QUrl>
#include <QtGui/QWidget>
#include <QUrlInfo>
#include <QFtp>
#include <QFile>
#include <QDir>
class client : public QWidget
{
Q_OBJECT

public:
client(QWidget *parent = 0);
~client();
};

class Spider : public QObject
{
Q_OBJECT
public:
Spider(QObject *parent = 0);
bool getDirectory(const QUrl &url);
signals:
void done();
private slots:
void ftpDone(bool error);
void ftpListInfo(const QUrlInfo &urlInfo);
private:
void processNextDirectory();

QFtp ftp;
QList<QFile *> openedFiles;
QString currentDir;
QString currentLocalDir;
QStringList pendingDirs;

};

#endif // CLIENT_H