2

ftp ディレクトリへの定数パスを持つプログラムがあります。そのディレクトリにアクセスし、その中のファイルに対していくつかの操作を行う必要がある関数があります。以前は、このディレクトリにはファイルが 1 つしかなく、常に同じ名前だったので、パスをハードコードしても問題ないと言われました。その形式では、これは機能しました。

void MyClass::FTPReader() { QString filepath = "ftp://user:password@ftp.myftp.com/needed_directory/needed_file.txt"; QNetworkAccessManager *nam = new QNetworkAccessManager(this); QNetworkRequest request(filepath); QNetworkReply *reply = nam->get(request); //Other operations done on data after this... }

ただし、a) このディレクトリには複数のファイルが存在する可能性があり、b) 変数名を持つことができることがわかりました。ディレクトリ内のすべてのファイルが常に必要になることはわかっていますが、番号や名前はわかりません。ftp ディレクトリをループする方法はありますか (この場合needed_directory、ネットワーク要求と応答を使用してファイルを個別に取得しますか?ファイル名のファイル固有の部分を除いて、おそらく上記と同じことを行う必要があると思います。それを使って何かをしますが、それを行う方法がわかりません. ありがとう!

4

2 に答える 2

1

QFtp を使用できます。ディレクトリ内のファイルのリストを取得するには、QFtp::list 関数を使用できます。QFtp::list が呼び出されると、ディレクトリ エントリごとに listInfo シグナルが 1 回発行されます。次のように実行できます。

QFtp ftp;
connect( &ftp,SIGNAL(listInfo(QUrlInfo)),this,SLOT(ftpListInfo(QUrlInfo)) );
ftp.connectToHost( "ftp://user:password@ftp.myftp.com/needed_directory" );

if( ftp.state() == QFtp::LoggedIn )
  ftp.list();

void FtpDialog::ftpListInfo( const QUrlInfo&info )
{
   if( info.isFile() )
      qDebug() << info.name();
}
于 2014-04-14T19:01:30.330 に答える