使用 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
("文件输出")吗?
我从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
("文件输出")吗?