Загрузите файл с SFTP-сервера с помощью libssh и запишите его в ofstream с помощью C ++? - PullRequest
0 голосов
/ 24 сентября 2018

Я написал следующий код из 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]);
}

Я прошел этот ответ , но я застрял в этом> Как я могу решитьэтот вопрос.

1 Ответ

0 голосов
/ 24 сентября 2018

Вы удалили цикл из Чтение файла с удаленного компьютера пример.

Верните его обратно.Важная часть примера, модифицированного для использования 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 )?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...