05 QFile *file = new QFile(currentLocalDir + "/"
06 + urlInfo.name);
07 if (!file->open(QIODevice::WriteOnly)) {
08 cerr << "Warning: Cannot open file << qPrintable(
09 QDir::convertSeparators(file->fileName))
10 << endl;
11 return;
12 }
13 ftp.get(urlInfo.name, file);
14 openedFiles.append(file);
15 }
16 } else if (urlInfo.isDir && !urlInfo.isSymLink) {
17 pendingDirs.append(currentDir + "/" + urlInfo.name);
18 }
19 }
Параметр
Если содержащиеся в
01 void Spider::ftpDone(bool error)
02 {
03 if (error) {
04 cerr << "Error: " << qPrintable(ftp.errorString) << endl;
05 } else {
06 cout << "Downloaded " << qPrintable(currentDir) << " to "
07 << qPrintable(QDir::convertSeparators(
08 QDir(currentLocalDir).canonicalPath));
09 }
10 qDeleteAll(openedFiles);
11 openedFiles.clear;
12 processNextDirectory;
13 }
Слот
Если ошибок нет, последовательность команд FTP и сигналов будет такой:
connectToHost(host, port)
login
cd(directory_1)
list
emit listInfo(file_1_1)
get(file_1_1)
emit listInfo(file_1_2)
get(file_1_2)
…
emit done
…
cd(directory_N)
list
emit listInfo(file_N_1)
get(file_N_1)
emit listInfo(file_N_2)
get(file_N_2)
…
emit done
Если файл фактически оказывается каталогом, он добавляется в список
Если возникнет сетевая ошибка при загрузке пятого файла, скажем, из двадцати файлов в каталоге, остальные файлы не будут скачаны. Если бы мы захотели скачать как можно больше файлов, то один из способов заключается в выполнении по одной операции
connectToHost(host, port)
login
cd(directory_1)
list
…
cd(directory_N)
list
emit listInfo(file_1_1)