如何解决如何在 C++ 中使用带有 libssh 的 SFTP 从服务器下载文件夹或文件?
是否可以使用 SFTP 从服务器下载文件或文件夹? (C++,libssh)
我尝试在这里遵循示例:https://github.com/substack/libssh/blob/master/examples/samplesftp.c
但我无法下载文件/文件夹...
这是我的代码:
int AutoUpdator::sftp_read_sync(ssh_session session,sftp_session sftp,std::string path)
{
ans_info("start sftp_read_sync");
std::cout << path << std::endl;
int access_type;
sftp_file file;
char buffer[MAX_XFER_BUF_SIZE];
int nbytes,nwritten,rc;
int fd;
access_type = O_RDONLY;
file = sftp_open(sftp,path.c_str(),access_type,0);
if (file == NULL) {
fprintf(stderr,"Can't open file for reading: %s\n",ssh_get_error(session));
return SSH_ERROR;
}
/* open a file for writing... */
fd = open("/home/writing_test.txt",O_WRONLY|O_CREAT,0700);
if (fd < 0) {
fprintf(stderr,"Can't open file for writing: %s\n",strerror(errno));
return SSH_ERROR;
}
for (;;) {
nbytes = sftp_read(file,buffer,sizeof(buffer));
if (nbytes > 0) {
std::cout << "nbytes :" << nbytes << std::endl;
std::cout << "buffer :" << buffer << std::endl;
server_version_ = buffer;
ans_info("server_version : " + server_version_);
}
else if (nbytes == 0) {
ans_info("EOF");
break; // EOF
}
else if (nbytes < 0) {
fprintf(stderr,"Error while reading file: %s\n",ssh_get_error(session));
sftp_close(file);
return SSH_ERROR;
}
nwritten = write(fd,nbytes);
if (nwritten != nbytes) {
fprintf(stderr,"Error writing: %s\n",strerror(errno));
sftp_close(file);
return SSH_ERROR;
}
}
rc = sftp_close(file);
if (rc != SSH_OK) {
fprintf(stderr,"Can't close the read file: %s\n",ssh_get_error(session));
return rc;
}
return SSH_OK;
}
这样我就可以复制一个文本文件了。更准确地说,它似乎是一种复制文本内容,然后将其添加到本地文件夹中的新文本文件的方法。
我想从服务器下载一些文件。如果我可以使用 sftp 获得它,这是最好的方法。 但如果有其他有用的方法,你能告诉我吗?
解决方法
下载文件夹是下载文件夹中的单个文件。
使用 const mainRoutes: Routes = [
{
path: 'list',component: ListComponent,},{
path: 'list/:id',component: ViewComponent
}
];
和 sftp_opendir
检索文件夹中各个文件的列表。然后用你的代码一一下载文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。