我正在使用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'處。 –