首页 > 解决方案 > 使用 sftp_open() 在 C++ 中使用 SFTP libssh 将文件从本地复制到远程时,文件返回 NULL 值

问题描述

我已经使用 C++ 中的 SFTP SSH 连接到服务器,并且我已经将文件从远程复制到本地。现在我正在尝试从本地复制到远程,我从这里读到了这个,但它不起作用。我写了以下代码。

 fr = fopen("C:/Users/Sami/Desktop/we/s.txt", "r");
fseek(fr, 0, SEEK_END);
 lSize = ftell(fr);
rewind(fr);
char * buffer = (char*)malloc(sizeof(char)*lSize);
 result = fread(buffer, 1, lSize, fr);
file = sftp_open(sftp, "/home/serversj/Desktop/sami/s.txt", O_CREAT, 1);
nwritten = sftp_write(file, buffer, result);

我使用'fopen'打开本地系统文件并将文件数据存储到缓冲区中,然后将缓冲区内容读取到结果中。在调试时,我可以看到 sftp_open 函数在“文件”中创建了一个 NULL 值,因此 sftp_write 显示错误“没有这样的文件”。我在窗户上工作。我得到错误在 sftp_open 中,我也尝试 了这个答案,但是在“sftp_open”中出现了问题。我不知道如何纠正这个..我陷入了困境。

错误是:'SFTP 服务器:权限被拒绝。'.. 并且 ssh_get 错误是'没有这样的文件'</p>

标签: c++sftplibssh

解决方案


您正在使用sftp_open(); 仅用于使用 access_type O_CREAT创建文件,您需要O_WRONLY将一些数据写入该文件。

 fr = fopen("C:/Users/Sami/Desktop/we/s.txt", "r");
    fseek(fr, 0, SEEK_END);
     lSize = ftell(fr);
    rewind(fr);
    char * buffer = (char*)malloc(sizeof(char)*lSize);
     result = fread(buffer, 1, lSize, fr);
    int access_type = O_WRONLY | O_CREAT;
    file = sftp_open(sftp, "/home/serversj/Desktop/sami/s.txt", access_type,S_IRWXU);
    nwritten = sftp_write(file, buffer, result);

我希望这会奏效..


推荐阅读