为什么我不能打开Perl的readdir返回的文件?

时间:2009-10-13 02:30:15

标签: perl readdir

嗯,我知道这是另一个新手问题,但我非常沮丧,我希望再次开悟。在你们的指导下,我已经学会了如何使用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>) {
...}

2 个答案:

答案 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'建议这只会返回相对路径,而不是完整路径。