如何避免使用C ++中的libssh scp命令压缩从远程ssh下载的图像,音频和视频文件?

时间:2019-02-25 19:05:16

标签: c++ ssh scp libssh

我正在尝试下载远程计算机上存储的一些文件。这些文件可以是文本文件,图像文件(为jpeg,jpg格式),视频或音频文件。文本文件已成功下载,没有任何问题,我也可以在下载它们的本地计算机上将其打开。但是下载后无法打开图像文件和其他视频,音频文件。当我检查时,它们与原始文件的大小不同。就像说原始文件是30kb,但下载的文件只有5kb。这就是也许下载后我无法在本地打开这些文件的原因吗? 我正在使用scp的{​​{1}}函数。以下是我正在尝试的:

libssh

请让我知道如何解决。另外,如果您还需要其他详细信息,请告诉我。

1 个答案:

答案 0 :(得分:3)

if (fwrite(buffer, rc, 1, fptr) != t_filesize)

应该是

if (fwrite(buffer, 1, rc, fptr) != rc)

if (fwrite(buffer, rc, 1, fptr) != 1)

rc1被交换。您打算写入rc字节,第二个参数是每个单元的大小,第三个参数是单元数。两者都与t_filesize无关。


while (rc >= 0)

不足,您还需要一个计数器来接收已接收的总字节数。在循环中以rc递增,如果total >= t_filesize则中断。


rc = ssh_scp_read(scp, buffer, sizeof(buffer));

扩展到

rc = ssh_scp_read(scp, buffer, min(sizeof(buffer), t_filesize - total));

因此,您不要求读取不可用的字节。


为什么文件太小是因为遇到了前面提到的错误处理错误。您只会获得第一个缓冲区已满(或者甚至没有,因为缓冲区未充分使用),并且您已经从传输中返回了。