我试图通过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更好的库,我可以毫无错误地使用它?
答案 0 :(得分:-1)
毕竟我不需要使用libssh。对于想要通过sftp复制文件的其他方式的人,只需使用:
system("scp -i private_key user@server.com:directory_to_file/file.txt path_to_local_dir/file.txt");