如何在Perl中读取空文件

如何在Perl中读取空文件,perl,Perl,我使用readdir方法将文件列表从目录读取到数组。我想知道如何读取zerro大小的文件,因为readdir只读取非zerro文件。我也想读取空文件(捕获文件名,即使它是空的,也将其视为存在)。我可以知道怎么做吗?以下是我如何从目录中读取文件:- opendir (FH, $dirs) || die $! ; my @lines = readdir (FH) ; closedir (FH) ; 提前谢谢。首先,您不应该使用裸字目录句柄。第二像这样的方法应该会奏效: use strict; u

我使用readdir方法将文件列表从目录读取到数组。我想知道如何读取zerro大小的文件,因为readdir只读取非zerro文件。我也想读取空文件(捕获文件名,即使它是空的,也将其视为存在)。我可以知道怎么做吗?以下是我如何从目录中读取文件:-

opendir (FH, $dirs) || die $! ;
my @lines = readdir (FH) ; 
closedir (FH) ;

提前谢谢。

首先,您不应该使用裸字目录句柄。第二像这样的方法应该会奏效:

use strict;
use warnings;

my $dirs="/whatever/dir/you/want";

opendir(my $dh,$dirs) or die $!;

#only grabbing actual files that we can read.
my @files=grep{(-f $_) and (-r $_)} map{"$dirs/$_"} readdir($dh); 

closedir($dh);

foreach my $file(@files)
{
  if(-z $file)
  {
    print "File $file is empty.\n";
  }
  else
  {
    print "File $file is not empty.\n";
  }
}

事实上,正如TLP在评论中指出的那样,您可以使用
-s
来获取文件的大小(以字节为单位)。

您的代码对我来说运行良好,并且包含空文件的名称。请发布更多关于什么不适合您的信息。“readdir将仅读取非zerro文件”不正确
readdir
将读取所有文件名,无论大小。您可以使用
perl-lwe'opendirf',”或die$!;而(readdir F){print exceller-s}
其中
exceller-s
表示“如果大小!=0”。Re“readdir将仅读取非zerro文件”,
readdir
不读取文件,并且它不会根据文件长度(或任何其他因素)过滤返回的文件。嗨,Greg Hewgill,TLP和所有花时间帮助我解决这个问题的人。我在测试readdir时编写了一个小脚本,它捕获了zerro内容文件。它能够读取空文件,事实上这是我的另一部分代码错误:(.很抱歉,我下次应该更加小心。你们的帮助很大!再次感谢!
我的$file(grep-f,readdir$dh)
为您节省了一些打字时间。但我不认为他要求的是零大小的文件,他认为readdir忽略了零大小的文件。没错,这更简洁。说实话,在重读问题时,我不确定OP是否想要保留零大小的文件。…
readdir
不返回文件路径,只返回文件名。修复.(@TLP的代码也有同样的问题。)