使用libssh从SFTP服务器下载文件,并使用C ++将其写入ofstream?

时间:2018-09-24 10:22:49

标签: c++ sftp libssh

我从here编写了以下代码。

#define MAX_XFER_BUF_SIZE 16384
int main()
{
    char buffer[MAX_XFER_BUF_SIZE];

      //..some content
     access_type = O_RDONLY;
     sftp_file file = sftp_open(sftp, "/home/ra/Desktop/sami/s.txt", access_type, 0);
     ofstream fin("C:/Users/s.txt", ios::binary | ios::in | std::ofstream::out | std::ofstream::app);

     nbytes = sftp_read(file, buffer, sizeof(buffer));
     fin.write(buffer, sizeof(buffer));

但是缓冲区的最大大小是预定义的。因此,它仅适用于小文件。我想获取更大的SFTP文件大小。为此,我需要通过追加模式将数据作为块发送。


for (int i=0;i<sizeof(buffer);i++)
{
    fin.write(buffer, buffer[i]);
}

我经历了this,但是我陷入了困境>如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

您已删除了Reading a file from the remote computer示例中的循环。

将其退回。修改为使用#element1, #element2, #element3 的示例的重要部分如下:

ofstream

Imo,char buffer[MAX_XFER_BUF_SIZE]; // ... for (;;) { nbytes = sftp_read(file, buffer, sizeof(buffer)); if (nbytes == 0) { break; // EOF } else if (nbytes < 0) { fprintf(stderr, "Error while reading file: %s\n", ssh_get_error(session)); sftp_close(file); return SSH_ERROR; } fin.write(buffer, nbytes); if (!fin) { fprintf(stderr, "Error writing"); sftp_close(file); return SSH_ERROR; } } fin.close(); if (!fin) { fprintf(stderr, "Error writing"); sftp_close(file); return SSH_ERROR; } 对我来说似乎是个坏名字。应该不是fin(“文件输出)吗?