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

Download file from SFTP server with libssh and write it to ofstream by using C++?

我从this写了下面的代码。

#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 answer,但我卡在了这个 > 我该如何解决这个问题。

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

Return它回来了。修改为使用 ofstream 的示例的重要部分如下:

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;
}

Imo,fin 对我来说似乎是个坏名字。不应该是fout("文件输出")吗?