为什么我在.rename上收到“ ftplib.error_perm:550访问被拒绝”?

时间:2019-09-01 19:55:06

标签: python ftp

我正在上传文件,然后要移动它。上传部分有效,但是尝试移动会引发访问错误。这是为什么?我还尝试移动目录中已有的文件,但这会导致相同的错误。

为简化起见,我将文件“移动”到成功写入的目录中。 FTP设置允许对该帐户进行读/写/执行,并且使用Filezilla,我也可以重命名文件。

代码:

import ftplib

testfile = "D:\movethis.txt";
session = ftplib.FTP('<IP>', '<U>', '<P>');
session.cwd("XXX\TestPyUpload\upload");
print(session.pwd());
file = open(testfile, 'rb');
session.storbinary('STOR movethis.txt', file);

session.rename("XXX\TestPyUpload\upload\movethis.txt", "XXX\TestPyUpload\upload\movethis2.txt");
file.close();
session.quit();

1 个答案:

答案 0 :(得分:1)

session.cwd("XXX\TestPyUpload\upload");

您当前的工作目录为XXX\TestPyUpload\upload

session.storbinary('STOR movethis.txt', file);

这会将文件movethis.txt保存到当前工作目录中,即路径为XXX\TestPyUpload\upload\movethis.txt

session.rename("XXX\TestPyUpload\upload\movethis.txt", "XXX\TestPyUpload\upload\movethis2.txt");

未知XXX到底是什么。但是,如果它不是以\开头,则这是一条相对路径。在这种情况下,rename命令中的名称将相对于当前工作目录(XXX\TestPyUpload\upload)进行解释,即您将XXX\TestPyUpload\upload\XXX\TestPyUpload\upload\movethis.txt重命名为XXX\TestPyUpload\upload\XXX\TestPyUpload\upload\movethis2.txt。源既不存在,也不存在目标目录,这解释了服务器引发的错误。

  

... session.rename("movethis.txt", "movethis2.txt");确实可以工作。

这些名称也被解释为与工作目录相关,即,按照您最初的意图将XXX\TestPyUpload\upload\movethis.txt重命名为XXX\TestPyUpload\upload\\movethis2.txt

  

... session.rename("\XXX\TestPyUpload\upload\movethis.txt", "\XXX\TestPyUpload\upload\movethis2.txt");也是如此(在开头添加了\

在这种情况下,您使用的是绝对文件名,这就是为什么它不考虑当前工作目录的原因,从而避免了原始问题。