Получить размер файла с -s в Perl - PullRequest
4 голосов
/ 24 августа 2010

Я пытаюсь найти размер файла с помощью оператора -s.Это выглядит так:

my $filesz = -s $filename

Я пробовал много разных способов, но он не может получить этот размер.
Однако, если я даю статический контент вместо имени файла, он отлично работает

Например:

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

Это отлично работает.

Я попытался добавить " в имя файла, это не сработало.Я удалил \n из имени файла, используя chomp, но проблема остается той же.Что здесь не так?

Ответы [ 3 ]

13 голосов
/ 24 августа 2010

-s $filename работает просто отлично;единственный вывод состоит в том, что нет файла с именем, содержащимся в $filename.Внимательно посмотрите на содержимое $filename и убедитесь, что ваш рабочий каталог соответствует вашему.

1 голос
/ 25 августа 2010

Как говорит Хоббс , наиболее вероятное объяснение состоит в том, что $filename не содержит того, что вы думаете, что оно делает.

Исходя из предыдущего опыта, я бы пошел дальше, чем этои сомневайтесь, что у $filename есть символ новой строки в конце.Вы читаете значение в $filename из файла или из пользовательского ввода?

0 голосов
/ 07 августа 2014

Я думаю, вы должны попробовать это, получив от 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";
    }

}
...