Я пытаюсь загрузить файл через sftp, и до сих пор я подключился к серверу через сеанс ssh, затем открыл сеанс sftp, используя сеанс ssh, и все выглядит нормально. Я открыл файл на сервере, и я использую sftp_read (), чтобы получить блок байтов из файла. Мой код:
char buffer[16384] = {};
ssize_t nbytes;
ssize_t ntotal = 0;
for (;;) {
nbytes = sftp_read(file, buffer, sizeof(buffer));
if (nbytes == 0) {
break; // EOF
}
localFile << buffer;
ntotal += nbytes;
//sftp_seek(file, ntotal);
}
Но по какой-то причине, когда блоки читаются, первые 20 байтов верны, а 21-й до 16384-го байта неверен. Оказывается, что после чтения 20 байтов считыватель переходит на 16384-й байт файла и продолжает чтение, как будто ничего не произошло.
Я провел некоторое тестирование, и если я изменил буфер на любой размер, будь то 16384, 21, 22, 50 и т. Д., Он все равно перепрыгнул на 16384-й байт после правильного чтения 20 байт.
Для этого есть причина? Есть ли лучшая библиотека, чем libssh и sftp, которую я могу использовать без ошибок?
Мне не нужно было использовать libssh в конце концов. Для тех, кому нужен другой способ копирования файлов через sftp, просто используйте:
system("scp -i private_key [email protected]:directory_to_file/file.txt path_to_local_dir/file.txt");