1

ここではおそらく非常に簡単なものが欠けているように感じますが、何を理解するのに途方に暮れています. FTP サーバー上のファイルにアクセスする必要がある C++ 関数 (Qt 4.7 を使用) があります。これを行うには、次の設定を行います。

QString source = "ftp://username:password@ftp.myftpserver.com/directoryname/";
QFtp *ftp = new QFtp(this);
ftp->connectToHost(source);

connect(ftp, SIGNAL(listInfo(QUrlInfo)), this, SLOT(processInfoFromFile(QUrlInfo)));
connect(ftp, SIGNAL(done(bool)), this, SLOT(finishThisProcess()));

ftp->list();

ソースをブラウザに直接入力すると、正しく表示され、ディレクトリ内のすべてのファイルが表示されます。また、プログラム内の別の場所に別の QFtp インスタンス (異なる変数名) を同じ方法でセットアップしました。それが機能します。ただし、これを使用すると、 のディレクトリsourceが空であると単純に解釈され、すぐに にジャンプしfinishThisProcessます。足りないものはありますか?ありがとう!

編集:これは ftp クライアントの別のインスタンスです:

ftp2 = new QFtp(this);
QString user = "username";
QString pass = "password";

connect(ftp2, SIGNAL(listInfo(QUrlInfo)), this, SLOT(processInfoFromFile(QUrlInfo)));
connect(ftp2, SIGNAL(done(bool)), this, SLOT(finishThisProcess()));

ftp2->connectToHost("ftp.myftpserver.com");
ftp2->login(user, pass);
ftp2->list();

a) これは 1 つ上のディレクトリ レベルにアクセスしようとすることと、b) ユーザー名とパスワードを別々に宣言してから手動でログインすることを除いて、他のものと同じです。このように問題を引き起こしているものを試しましたが、役に立ちませんでした。

4

1 に答える 1

1

1) 関連するステートメントの前にシグナルとスロットを接続する必要があります。

2) また、ユーザー名とパスワードでログイン方法を使用する必要があります。

したがって、コードは次のようになります。

QString source = "ftp://ftp.myftpserver.com/directoryname/";
QFtp *ftp = new QFtp(this);

connect(ftp, SIGNAL(listInfo(QUrlInfo)), this, SLOT(processInfoFromFile(QUrlInfo)));
connect(ftp, SIGNAL(done(bool)), this, SLOT(finishThisProcess()));

ftp->connectToHost(source);
ftp->login(username, password);
ftp->list();
于 2013-09-27T19:44:11.937 に答える