0

我正在尝试通过 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 更好的库,我可以毫无错误地使用?

4

1 回答 1

-1

毕竟我不需要使用 libssh。对于任何想要通过 sftp 复制文件的另一种方式的人,只需使用:

system("scp -i private_key user@server.com:directory_to_file/file.txt path_to_local_dir/file.txt");
于 2014-11-19T03:17:28.717 回答