【问题标题】:Download file from SFTP server with libssh and write it to ofstream by using C++?使用 libssh 从 SFTP 服务器下载文件并使用 C++ 将其写入 ofstream?
【发布时间】:2019-02-27 20:13:18
【问题描述】:

我从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,但我被困在这个> 我该如何解决这个问题。

【问题讨论】:

    标签: c++ sftp libssh


    【解决方案1】:

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

    退货。修改为使用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("file output")吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多