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

File returns NULL Value while using sftp_open() for copying file from local to remote using SFTP libssh in C++

我已经使用 C++ 中的 SFTP SSH 连接到服务器,并且我已经将文件从 远程复制到本地 。现在我正在尝试从 local 复制到 remote,我从 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 错误是“没有这样的文件”

您使用 sftp_open(); 只是为了使用 access_type O_CREAT[= 创建文件19=],您需要 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);

我希望这会奏效..

检查您的常量:

#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 );