我正在尝试下载远程计算机上存储的一些文件。这些文件可以是文本文件,图像文件(为jpeg,jpg格式),视频或音频文件。文本文件已成功下载,没有任何问题,我也可以在下载它们的本地计算机上将其打开。但是下载后无法打开图像文件和其他视频,音频文件。当我检查时,它们与原始文件的大小不同。就像说原始文件是30kb,但下载的文件只有5kb。这就是也许下载后我无法在本地打开这些文件的原因吗?
我正在使用scp
的{{1}}函数。以下是我正在尝试的:
libssh
请让我知道如何解决。另外,如果您还需要其他详细信息,请告诉我。
答案 0 :(得分:3)
if (fwrite(buffer, rc, 1, fptr) != t_filesize)
应该是
if (fwrite(buffer, 1, rc, fptr) != rc)
或
if (fwrite(buffer, rc, 1, fptr) != 1)
rc
和1
被交换。您打算写入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));
因此,您不要求读取不可用的字节。
为什么文件太小是因为遇到了前面提到的错误处理错误。您只会获得第一个缓冲区已满(或者甚至没有,因为缓冲区未充分使用),并且您已经从传输中返回了。