Я пытаюсь загрузить файл через 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");
localFile.write(buffer, nbytes)