2010-08-24 12 views
4

我正在嘗試使用-s運算符來查找文件的大小。它看起來像這樣:使用Perl中的-s獲取文件大小

my $filesz = -s $filename 

我嘗試了各種各樣的方式,但它不能得到這個大小。
但是,如果我給靜態的內容,而不是文件名,它工作正常

例如:

$filesz = -s "/tmp/abc.txt" 

這工作得很好。

我試着在文件名中加入",它沒有工作。我使用chomp從文件名中刪除了\n,但問題依然存在。這裏有什麼問題?

+1

'-s $文件名,如果-e $ filename' – 2010-08-24 19:16:55

+0

你有沒有打印出來的'$ filename'的內容,看它是否你認爲它是什麼? – Ether 2010-08-24 19:27:49

+0

@Ether:我確實......它只是它\ n這是不容易看見:) – Jack 2010-08-25 07:40:41

回答

13

-s $filename工作得很好;唯一的結論是,沒有包含在$filename中的名稱的文件。仔細查看$filename的內容,並確保您的工作目錄是您的想法。

+0

有兩個問題 1.有沒有得到正確的chomped。打印時不可見 2.我添加了「字符圍繞不與-s一起工作的路徑 – Jack 2010-08-25 07:38:41

+0

@Jack聽起來您的問題實際上是使用'\ r',而不是'\ n'(並且您的問題會已經通過在'\ r \ n'和'\ n'之間進行轉換的':crlf' I/O層解決了),無論如何,很高興你能把它整理出來 – hobbs 2010-08-25 08:23:35

1

As hobbs says,最可能的解釋是$filename不包含您認爲它所做的事。

根據以前的經驗,我會走得更遠,並猶豫一下$filename在結尾處有一個換行符。您是否從文件或用戶輸入中讀取$filename中的值?

+0

是的,這是問題之一。從readdir循環獲取文件名。 – Jack 2010-08-25 07:42:14

0

我想你應該試試這個您從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"; 
    } 

}