【问题标题】:How can I download entire directory from remote machine with using scp libssh library in c++?如何使用 c++ 中的 scp libssh 库从远程机器下载整个目录?
【发布时间】:2015-09-01 00:33:10
【问题描述】:

我正在尝试在我的远程机器上下载特定目录。我使用此代码从远程机器下载了一个文件。

但我需要下载整个目录。我试过this 代码。

但我无法复制整个目录。

// Indicate the which file going to be copied
scp = ssh_scp_new(session, SSH_SCP_READ, "/home/emres/test.xml");

if ( scp == NULL )
{
    EventLogger::LogMessage(true, "Error allocating scp session: scp == NULL");
    return SSH_ERROR;
}

rc = ssh_scp_init(scp);
if ( rc != SSH_OK )
{
    EventLogger::LogMessage(true, "Error initializing scp session: rc != SSH_OK");
    ssh_scp_free(scp);
    return rc;
}

rc = ssh_scp_pull_request(scp);
if ( rc != SSH_SCP_REQUEST_NEWFILE )
{
    EventLogger::LogMessage(true, "Error receiving information about file: rc != SSH_SCP_REQUEST_NEWFILE");
    return SSH_ERROR;
}

fileSize        = ssh_scp_request_get_size(scp);
filename        = strdup(ssh_scp_request_get_filename(scp));
filePermission  = ssh_scp_request_get_permissions(scp);

EventLogger::LogMessage(true, "Receiving file %s, size %d, permisssion %o", filename, fileSize, filePermission);

buffer = (char *)malloc(sizeof(char)*fileSize);

if ( buffer == NULL )
{
    EventLogger::LogMessage(true, "Memory allocation error!");
    return SSH_ERROR;
}

ssh_scp_accept_request(scp);
rc = ssh_scp_read(scp, buffer, sizeof(char)*fileSize);
if ( rc == SSH_ERROR )
{
    EventLogger::LogMessage(true, "Error receiving file data: rc == SSH_ERROR!");
    free(buffer);
    return rc;
}

char path[100];
sprintf(path, "D:/%s", filename);

if ( 0 < ( fd=open(path, O_RDWR | O_CREAT | O_TRUNC, filePermission) ) )
{
    write(fd, buffer, sizeof(char)*fileSize);
    close(fd);
}
else
{
    EventLogger::LogMessage(true, "Failed to open file!");
}

free(buffer);
free(filename);

ssh_scp_close(scp);
ssh_scp_free(scp);
return SSH_OK;

【问题讨论】:

  • 请编辑您的问题以描述运行代码时会发生什么?你有任何错误吗?错误说明了什么?
  • 这段代码可以正常工作,但这只是下载了一个文件(test.xml)。我要下载文件夹。

标签: c++ directory scp subdirectory libssh


【解决方案1】:

我知道这是一个老问题,但您仍然应该以递归模式打开会话并使用正确的文件夹路径,而不是文件。

scp = ssh_scp_new(session, SSH_SCP_READ | SSH_SCP_RECURSIVE, "/home/emres");

【讨论】:

    猜你喜欢
    • 2016-08-24
    • 1970-01-01
    • 2016-07-11
    • 2012-01-05
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2013-07-02
    相关资源
    最近更新 更多