我正在使用libssh2 lib与设备进行SFTP会话。libssh2 - 使用SFTP读取文件
但是,当我尝试读取文件并返回输出时,永远不会返回完整的文件。
我想是因为控制字符(如\0
)在文件中间。
代码:
sftp_handle = libssh2_sftp_open(sftp_session, filename, LIBSSH2_FXF_READ, 0);
if (!sftp_handle) return "-1";
char buf[99999];
int x = libssh2_sftp_read(sftp_handle, buf, sizeof(buf));
char * output = (char *)malloc(sizeof(char)*x);
memcpy(output, buf, x);
output[x] = '\0';
libssh2_sftp_close(sftp_handle);
************更新1 ************
我想要的文件阅读是一个几乎所有ASCII字符的文本文件。
************更新2 ************
x
是writen到缓冲器中,该文件的字节数有〜98KB (99999字节),但libssh2_sftp_read
函数返回30000到x
。
您是否检查过'libssh2_sftp_read'实际返回的内容?您试图阅读的文件,它是什么类型的文件?它的内容是什么?它是一个可以包含嵌入零的二进制文件吗?如果它是一个二进制文件,那么不要使用文本输出(如'cout << output'等)。您收到的数据的目的是什么?你应该如何使用这些数据? –
''libssh2_sftp_read'和'memcpy'都不会在'\ 0'处停止,您应该检查'x'。 –
开始使用'std :: string'并打印出来,'(const)char *'的'operator <<'将停在'\ 0'处。 –