嗯,我知道这是另一个新手问题,但我非常沮丧,我希望再次开悟。在你们的指导下,我已经学会了如何使用glob函数来读取目录中每个文件的内容。现在我正在尝试readdir-foreach组合做同样的事情,但我一直收到“无法打开文件:权限被拒绝”错误。为什么会发生与管理员相同的目录,相同的文件和相同的文件。有人可以告诉我我做错了什么吗?感谢。
以下代码使用glob函数,它可以工作:
#! perl
my $dir = 'f:/corpus/';
my @files = glob "$dir/*";
foreach my $file (@files) {
open my $data, '<',"$file" or die "Cannot open FILE";
while(<$data>) {
...}
以下代码失败,错误消息显示“无法打开文件:权限被拒绝”。但为什么?
#! perl
my $dir = 'f:/corpus/';
opendir (DIR,'f:/corpus/') or die "Cannot open directory:$!";
my @files=readdir(DIR);
closedir DIR;
foreach my $file (@files) {
open my $data, '<',"$file" or die "Cannot open FILE:$!";
while(<$data>) {
...}
答案 0 :(得分:8)
readdir()
函数仅返回文件的名称,而不是完整路径。所以你试图打开例如"foo.txt"
代替“f:\ corpus \ foo.txt”。
答案 1 :(得分:4)
您应该记住,readdir
会返回目录名和文件名。您最有可能尝试打开一个特殊目录条目.
或..
,如果您正在使用这些功能,则通常需要过滤这些条目:
foreach my $f (@files)
{
# skip special directory entries
if ($f ne '.' && $f ne '..')
{
# ...
print "$f\n";
}
}
另请注意Andy Ross'建议这只会返回相对路径,而不是完整路径。