我从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,但是我陷入了困境>如何解决这个问题。
答案 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
(“文件输出)吗?