如何检查文件是否为文本文件?

24
Perl6有像Perl5的-T文件测试一样的东西吗?可以判断文件是否为文本文件吗?
3个回答

23

没有内置的功能,但是有一个模块Data::TextOrBinary可以实现。

use Data::TextOrBinary;
say is-text('/bin/bash'.IO);                            # False
say is-text('/usr/share/dict/words'.IO);                # True

11

那是一种在Perl 6中没有被翻译的启发式算法。您可以简单地以UTF8(或ASCII)格式读取它来执行相同的操作:

given slurp("read-utf8.p6", enc => 'utf8') -> $f {
    say "UTF8";
}

(将read-utf8.p6替换为您想要检查的文件的名称)


2
实际上,如果文件不是有效的UTF8格式,这将抛出异常。此外,它也无法理解UTF16格式,例如。 - timotimo
1
@timotimo 对的,但原始代码只检查了ASCII或UTF8编码。应该检查一系列编码,但总体思路是相同的。 - jjmerelo
1
@jjmerelo 您的评论与 https://dev59.com/enNA5IYBdhLWcg3wmfEa 的答案不一致。 - plugwash

5
我们可以使用以下代码来利用File::Type。
use strict;
use warnings;

use File::Type;

my $file      = '/path/to/file.ext';
my $ft        = File::Type->new();
my $file_type = $ft->mime_type($file);

if ( $file_type eq 'application/octet-stream' ) {
    # possibly a text file
}
elsif ( $file_type eq 'application/zip' ) {
    # file is a zip archive
}

Source: https://metacpan.org/pod/File::Type


这是一个perl5模块,但问题是关于perl6解决方案的。 - LuVa
2
这段代码可以被编辑为 use File::Type:from<Perl5>$ft.mime_type($file),以成为 Perl6 代码。 - Brad Gilbert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接