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

时间:2018-09-18 07:06:32

标签: c++ sftp libssh

我已在c ++中使用SFTP SSH连接到服务器,并且已经将文件从远程复制到本地。现在,我正在尝试从本地复制到远程,我从this中了解了此内容,但无法正常工作。我写了以下代码。

  

 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函数在'file'中创建了一个NULL值,因此sftp_write显示错误'No such file'。我正在Windows上工作。我得到的错误是在sftp_open中,我也尝试了this answer,但是在sftp_open中出现了问题。我不知道如何解决这个问题。

错误是:“ SFTP服务器:权限被拒绝。”,而ssh_get错误是“没有这样的文件”

2 个答案:

答案 0 :(得分:0)

您使用 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);

我希望这会起作用。

答案 1 :(得分:0)

检查常量:

#define O_RDONLY     0x0000
#define O_WRONLY     0x0001
#define O_RDWR       0x0002

#define O_CREAT      0x0100
#define O_TRUNC      0x0200
#define O_EXCL       0x0400

#define S_IFREG      0x8000          /* regular */
#define S_IREAD      0x0100          /* read permission, owner */
#define S_IWRITE     0x0080          /* write permission, owner */
#define S_IEXEC      0x0040          /* execute/search permission, owner */
#define S_IRWXU      S_IREAD | S_IWRITE | S_IEXEC

int accesstype = O_WRONLY | O_CREAT | O_TRUNC;
mode_t mode = S_IRWXU;
sftp_file file = sftp_open( sftpSession, dstFile, accesstype, mode );