为什么我不能打开由Perl的READDIR返回的文件?(Why can't I open f

2019-07-22 18:41发布

嗯,我知道这又是一个新手的问​​题,但我非常沮丧,我期待再次启发。 有了你们的指导下,我已经学会了如何使用水珠函数读取每个文件的内容目录。 现在我想要的READDIR-的foreach组合做同样的事情,但我不断收到“无法打开文件:Permission denied”错误。 为什么会出现这种情况与同一目录中,相同的文件和相同的我作为管理员。 可有人好心告诉我,我做错了什么? 谢谢。

下面的代码使用的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>) {
...}

Answer 1:

readdir()函数返回只有文件的名称,而不是完整的路径。 所以,你试图打开例如"foo.txt" ,而不是“F:\语料库\ foo.txt的”。



Answer 2:

你应该记住, readdir返回目录名文件名。 最有可能你正试图打开特殊的目录条目之一. 或者..你通常需要过滤掉,如果你使用这些功能:

foreach my $f (@files)
{
    # skip special directory entries
    if ($f ne '.' && $f ne '..')
    {
        # ...
        print "$f\n";
    }
}

还要注意的安迪·罗斯 “的建议,这将只返回相对路径,而不是完整路径。



文章来源: Why can't I open files returned by Perl's readdir?
标签: perl readdir