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

Mik*_*ke 1 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>) {
...}
Run Code Online (Sandbox Code Playgroud)

以下代码失败,错误消息显示"无法打开文件:权限被拒绝".但为什么?

#! 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>) {
...}
Run Code Online (Sandbox Code Playgroud)

And*_*oss 8

readdir()函数仅返回文件的名称,而不是完整路径.所以你试图打开eg "foo.txt"而不是"f:\ corpus\foo.txt".

  • 只是添加一个可能的解决方案:`使用File :: Spec; 打开我的$ data,'<',File :: Spec-> catfile($ dir,$ file);` (2认同)