从文件读取时,sftp_read会跳过大块字节

时间:2014-11-16 21:49:01

标签: c++ linux ssh sftp libssh

我试图通过sftp下载文件,到目前为止,我已经通过ssh会话连接到服务器,然后使用ssh会话打开了一个sftp会话,一切似乎都很好。我在服务器上打开了一个文件,我使用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等,它仍然在正确读取20个字节后跳转到第16384个字节。

这有什么理由吗?是否有比libssh和sftp更好的库,我可以毫无错误地使用它?

1 个答案:

答案 0 :(得分:-1)

毕竟我不需要使用libssh。对于想要通过sftp复制文件的其他方式的人,只需使用:

system("scp -i private_key user@server.com:directory_to_file/file.txt path_to_local_dir/file.txt");