在Perl中使用-s获取文件大小
我正在尝试使用在Perl中使用-s获取文件大小,perl,filesize,Perl,Filesize,我正在尝试使用-s运算符查找文件的大小。看起来是这样的: my $filesz = -s $filename 我尝试了很多不同的方法,但都不能达到这个尺寸。 但是,如果我给出的是静态内容而不是文件名,则效果很好 例如: $filesz = -s "/tmp/abc.txt" 这个很好用 我尝试添加“在文件名中,它不起作用。我使用chomp从文件名中删除了\n,但问题仍然存在。这里怎么了?-s$filename工作正常;唯一的结论是,$filename中没有包含名称的文件。仔细查看$filen
-s
运算符查找文件的大小。看起来是这样的:
my $filesz = -s $filename
我尝试了很多不同的方法,但都不能达到这个尺寸。但是,如果我给出的是静态内容而不是文件名,则效果很好 例如:
$filesz = -s "/tmp/abc.txt"
这个很好用
我尝试添加
“
在文件名中,它不起作用。我使用chomp
从文件名中删除了\n
,但问题仍然存在。这里怎么了?-s$filename
工作正常;唯一的结论是,$filename
中没有包含名称的文件。仔细查看$filename
的内容,确保您的工作目录是您认为的目录。,最有可能的解释是$filename
不包含您认为的目录
根据以前的经验,我会进一步猜测,
$filename
末尾是否有换行符。您是从文件还是从用户输入中读取$filename
中的值?我认为您应该尝试从readdir获取以下内容:
#!/usr/bin/perl -w
use strict;
use warnings;
my $filedir = "/documents/sample/file.txt";
opendir(my $dir, $filedir) or die "Could not load directory";
my @read_dir = sort grep {!-d}readdir($dir);
foreach my $fileInDir(@read_dir)
{
my $currentDestination = "$filedir/$fileInDir";
my $filesize = -s $currentDestination;
if(-z $currentDestination)
{
print "Zero - Filename: $fileInDir Size: $filesize\n";
}
else
{
print "Non - Zero Filename: $fileInDir Size: $filesize\n";
}
}
-s$filename if-e$filename
你有没有打印出$filename
的内容,看看它是否是你认为的那样?@Ether:我有。。只是它是\n不容易看到:)有两个问题1。有一个\n没有被正确地咀嚼。它在打印2时不可见。我在路径周围添加了“字符,该字符与-s不起作用。@Jack听起来你的问题实际上与\r
有关,而不是\n
(你的问题应该由:crlf
I/O层解决,该层在\r\n
和\n
之间转换).无论如何,很高兴你把它解决了。是的,这是问题之一。我从readdir循环中获取文件名。