【发布时间】:2019-11-14 06:42:58
【问题描述】:
我可以在使用函数 Open() 或 OpenFile(path, os.O_RDONLY) 后读取文件,但之后无法删除文件。所以我尝试使用写标志 os.RDWR 打开文件,如下面的代码,看看我是否可以删除文件。但是,使用 os.RDWR 我什至无法读取该文件。谁能向我解释一下导致这个问题的原因?我收到错误 sftp:“权限被拒绝”(SSH_FX_PERMISSION_DENIED) 我试过查看文件的权限码,文件是-rwxrwxrwx。
import (github.com/pkg/sftp)
config = sftp.NewConfig(nil)
config.SetAcct("xxxxx","xxxxx")
config.SetDes("ip address", 1234)
config.Connect()
if file, err = config.Client.OpenFile(path, os.O_RDWR); err != nil {
log.Println("Cannot open "+path+" , err:", err)
}
if _, err = ioutil.ReadAll(file); err != nil {
log.Println("Cannot read "+path+", err:", err)
}
file.Close()
err = config.Client.Remove(file)
if err != nil {
log.Println("cannot remove file)
}
问题已解决: 发现我打开了文件而没有关闭它。并且不知何故,该文件仍然由 FreeSSHDService 打开。这就是为什么我无法删除该文件。
【问题讨论】:
-
文件所在目录的权限是什么?您必须在目录中具有写权限。
-
@BurakSerdar drwxrwxrwx 来自 func Mode()
-
什么是config.Client?也许你可以发布它的相关部分。另外,该文件是普通文件吗?
-
@BurakSerder 我将其发布在代码部分。配置来自 sftp 包。该文件是一个二进制文件。它是什么文件有关系吗?如果我使用 Open(),我可以阅读它,但当我使用 OpenFile() 和 O_RDWR 时,我不能。
-
您正在使用 sftp。在文件系统向您显示的内容之上还有另一层权限。听起来 sftp 服务器为您提供只读访问权限。