-s和stat返回负数?

-s和stat返回负数?

对一个比较大的文件,(3G左右)-s 和 stat返回的都是负数,请问这种情况怎么处理?怎样才能得到正确的文件大小??

Math::BigInt得到的也是负数....

多谢了!

环境:ActivePerl + NTFS
不太清楚…… 帮顶……






















---------------------------------------
淘嫩网
也许是我这里perl版本的问题.....
perl -V 里有一句 uselargefiles=undef,结果正常的机器上都是define的~~~

呜呼。。。


QUOTE:
原帖由 newbiecomes 于 2008-11-26 11:10 发表
也许是我这里perl版本的问题.....
perl -V 里有一句 uselargefiles=undef,结果正常的机器上都是define的~~~

呜呼。。。

我这确实是uselargefiles=define
openSUSE-11.0-DVD-i386.iso
Size: 4602126336
只好用这种方法解决了。

[Copy to clipboard] [ - ]
CODE:
sub GetLargeFileSize
{
    die "Error arguments in GetLargeFileSize ." if ( @_ != 1 );
    my $largefile = shift;
    my $filesize = 0;
    # check file whether exist
    if ( !(-e $largefile) )
    {
        return $filesize;
    }
    # get basename
    $largefile =~ /([-\w.]+)$/;
    my $name = $1;
    # check perl compile options
    my $perlverbose = `perl -V`;
    if ( $perlverbose =~ /uselargefiles=undef/i )
    {
        # perl DO NOT support large files
        if ( $^O =~ /mswin/i )
        {
            my $findstr = $ENV{'windir'} . "\\system32\\findstr.exe";
            if ( !(-e $findstr) )
            {
                # findstr.exe not exist
                $filesize = 0;
            }
            else
            {
                # get size from output of dir command
                my $line = `dir /-C $largefile | findstr $name`;
                if ( $line =~ /\s(\d+)\s/ )
                {
                    $filesize = $1;
                }
            }
        }
        elsif ( $^O =~ /linux/i )
        {
            my $line = `ls -l $largefile`;
            if ( $line =~ /\s(\d+)\s+\d/g )
            {
                $filesize = $1;
            }
        }
        else
        {
            $filesize = 0;
        }
    }
    else
    {
        # perl support large files
        $filesize = -s $largefile;
    }
    return $filesize;
}