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

sid*_*com 22 file-type perl6 raku

Perl6是否具有类似于Perl5 -T文件测试的功能来判断文件是否为文本文件?

Jon*_*ton 20

没有内置任何内容,但是有一个模块Data :: TextOrBinary可以做到这一点。

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


jjm*_*elo 10

这是一种启发式方法,尚未转换为Perl 6。您可以简单地以UTF8(或ASCII)形式读取它来执行以下操作:

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

(用要检查的文件名替换read-utf8.p6)

  • 实际上,如果该文件不是有效的utf8,则将引发异常。而且,例如,它不会理解utf16 (2认同)

小智 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
}
Run Code Online (Sandbox Code Playgroud)

来源:https : //metacpan.org/pod/File :: Type

  • 这可以编辑为`use File::Type:from<Perl5>` 和`$ft.mime_type($file)` 为Perl6 代码。 (2认同)