gpt4 book ai didi

perl 文件大小计算不起作用

转载 作者:行者123 更新时间:2023-12-04 18:44:26 26 4
gpt4 key购买 nike

我正在尝试编写一个简单的 perl 脚本,它将遍历目录中的常规文件并计算所有文件放在一起的总大小。但是,我无法获得文件的实际大小,我也不知道为什么。这是代码的相关部分。我输入用于调试的打印语句:

$totalsize = 0;
while ($_ = readdir (DH)) {
print "current file is: $_\t";
$cursize = -s $_;
print "size is: $cursize\n";
$totalsize += $cursize;
}

这是我得到的输出:

current file is: test.pl    size is: 
current file is: prob12.pl size is:
current file is: prob13.pl size is:
current file is: prob14.pl size is:
current file is: prob15.pl size is:

因此文件大小保持空白。我尝试使用 $cursize = $_ 代替,但这样做的唯一效果是检索当前目录和父目录的文件大小各为 4096 字节;它仍然没有获得常规文件的任何实际文件大小。

我在网上看过几本关于 perl 的书,似乎 perl 无法获取文件大小,因为脚本无法读取文件。我通过放入 if 语句对此进行了测试:

print "Cannot read file $_\n" if (! -r _);

果然对于每个文件,我都收到错误消息,指出无法读取该文件。我不明白为什么会这样。包含相关文件的目录是我的主目录的子目录,我正在从我的主目录中的另一个子目录中以我自己的身份运行脚本。我拥有所有相关文件的读取权限。我尝试将文件的模式更改为 755(从之前的 711),但我仍然得到每个文件的 Cannot read file 输出。

我不明白这是怎么回事。要么我对运行 perl 脚本时权限的工作方式感到困惑,要么我对使用 -s _ 的正确方法感到困惑。感谢您的指导。谢谢!

最佳答案

如果这不仅仅是你的错字 -s _ 而不是正确的 -s $_ 那么请记住 readdir 返回文件相对于您使用 opendir 打开的目录的名称。正确的方法应该是这样的

my $base_dir = '/path/to/somewhere';
opendir DH, $base_dir or die;
while ($_ = readdir DH) {
print "size of $_: " . (-s "$base_dir/$_") . "\n";
}
closedir DH;

您还可以查看核心模块 IO::Dir它提供了一种以更简单的方式访问文件名和属性的tie方式。

关于perl 文件大小计算不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13601443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com