使用 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 );
我已经使用 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 );