我已在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错误是“没有这样的文件”
答案 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 );