【发布时间】:2014-09-14 12:17:45
【问题描述】:
这是我的代码:
opendir(DIR, $directoryPath) or die "Cant open $directoryPath$!";
my @files = readdir(DIR); #Array of file names
closedir (DIR) or die "Cant close $directoryPath$!";
我正在使用@files 在目录中创建一个文件名数组,以便稍后在程序中重命名。
问题是:
- 我在关闭的行收到错误“dirhandle 的错误符号”。
- 如果我不关闭文件来避免这种情况,我就没有更改文件名的权限(我使用的是 Windows)。
-
我尝试了另一种重命名文件的方法(如下),通过在目录句柄中以不同的方式重命名文件来尝试解决问题的不同方法,但这只会重复权限错误。
opendir(DIR, $directoryPath) or die "Cant open $directoryPath$!"; while( (my $filename = readdir(DIR))) { rename($filename, $nFileName . $i) or die "Cant rename file $filename$!"; i++; } closedir (DIR) or die "Cant close $directoryPath$!";
通过快速研究,我认为权限错误是 Windows 安全功能,因此您无法在文件打开时对其进行编辑,但我无法找到一个简单到足以让我理解的解决方案。
最好回答第 1 点或第 3 点,但回答第 2 点也是有用的。
以下第 1 点和第 2 点中使用的完整代码
use 5.16.3;
use strict;
print "Enter Directory: ";
my $directoryPath = <>;
chomp($directoryPath);
chdir("$directoryPath") or die "Cant chdir to $directoryPath$!";
opendir(DIR, $directoryPath) or die "Cant open $directoryPath$!";
my @files = readdir(DIR); #Array of file names
closedir (DIR) or die "Cant close $directoryPath$!";
my $fileName = "File ";
for my $i (0 .. @files)
{
rename($files[$i], $fileName . ($i+1)) or die "Cant rename file $files[$i]$!";
}
chdir; #return to home directory
我可以正确输入路径,但是错误信息(完全复制)是:
Can't rename file .Permission denied at C:\path\to\file\RenameFiles.pl line 19, <> line 1.
【问题讨论】:
-
无法使用给定的代码重现您的错误。此外,您的代码中仍然有
i,它应该是$i。 -
你
chdir-ed 到正确的目录了吗?举例说明你从 rename 得到的错误信息。 -
您已添加代码以避免重命名
.和..对吗?否则,那是您的权限问题。 -
@TLP 已添加代码和确切的错误消息
-
@TLP 也修复了错误符号错误,语法稍有错误