Я пытаюсь загрузить файл через 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, которую я могу использовать без ошибок?
localFile.write(buffer, nbytes)
- person programmerjake   schedule 17.11.2014localFile << buffer
записывает, пока не встретит нулевой символ, поэтому на самом деле он может записать гораздо больше, чем 16 КБ. - person programmerjake   schedule 17.11.2014