【发布时间】:2019-02-22 03:31:44
【问题描述】:
我已经使用 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 函数在“文件”中创建了一个 NULL 值,因此 sftp_write 显示错误“没有这样的文件”。我在窗户上工作。我得到错误是在 sftp_open 中,我也尝试了this answer,但在 'sftp_open' 中出现问题。我不知道如何纠正这个..我陷入了困境。
错误是:'SFTP server : Permission denied.'.. 并且 ssh_get 错误是'No such file'
【问题讨论】:
-
您的服务器上是否存在
/home/serversj/Desktop/sami/目录? -
@melpomene:是的,我已经使用该目录将文件从 远程复制到本地,并且在调试错误时显示“读取访问冲突。文件为 nullptr。”因此“权限被拒绝”。
-
在您的其他问题中,您使用了
/home/server/Desktop/sa/,即server而不是serversj和sa而不是sami。 -
为什么不在代码中进行适当的错误检查?空指针取消引用并不意味着“权限被拒绝”。
-
是的,实际上我并没有把程序中使用的实际路径放在这里,我只是重命名了这些路径,同时发布了一些安全问题的问题。但实际路径是存在的。我可以看到的错误是“sftp_open:SFTP 服务器:权限被拒绝。”。是否与 sftp_open(file,"",acces_type,mode) 中的设置模式有关; ?并且这里使用的access_type是'O_CREAT',mode是1。对吗?