1

我有一个文件,我需要将其移动到特定文件夹并在执行此操作时重命名。

use File::Copy "move";
print rename('D:\\Test\\Input\\temp.cxx','D:\\Test\\Input\\new.cxx'), die $! ;

但这给了我一个错误,说“D:\Test\Test.pl 第 35 行,第 5899 行的权限被拒绝”。我以管理员身份运行。甚至所有文件夹都具有完全权限。

更新 它现在正在工作。我在这一行之前的一行打开了一个文件。一旦我关闭它,重命名就可以了。但是,如果我将路径存储在变量中,它会再次给我同样的错误。

4

3 回答 3

4

你在这里有几个问题。

首先,您正在使用 File::Copy 但不使用其中的任何内容。该rename函数是核心 Perl 的一部分。

其次,您正在打印rename可能没有意义的返回值。它返回一个真或假值。

第三,无论移动的返回状态如何,你总是在dieing。

第四,所有这些反斜杠都容易出错。

我认为您可能想要的更像是这样的:

rename('D:/Test/Input/temp.cxx','D:/Test/Input/new.cxx') or die "Unable to rename: $!";

这可能有助于暴露您的权限问题。

于 2013-03-01T22:37:58.253 回答
1

正如安迪所说,在您的示例中不需要 File::Copy,除非您在其他地方使用“移动”?以下在我的带有 Activestate Perl 5.14.2 的 Win7 机器上完美运行:

use strict;
use warnings;
rename "C:\\Users\\JLBlack\\test.txt", "C:\\Users\\JLBlack\\test.new" or die "rename failed because: $!\n";
exit();

你确定目的地不存在吗?而且它没有被其他任何东西打开/使用?您可以从 Windows 命令提示符移动文件吗?

于 2013-03-01T23:23:49.607 回答
0

我的问题是我在新文件名中有一个冒号。这在 Windows 上是被禁止的,但 Windows 通常会告诉你这一点。如果您的界面类似于 Perl,显然所有通过的都是“权限被拒绝”。

于 2021-05-13T14:16:00.400 回答