【问题标题】:How to check if a file is a text file?如何检查文件是否为文本文件?
【发布时间】:2019-04-15 06:42:28
【问题描述】:

Perl6 是否有类似 Perl5 -T file test 的功能来判断文件是否为文本文件?

【问题讨论】:

    标签: file-type raku


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这是has not been translated to Perl 6 的启发式方法。你可以简单地用 UTF8(或 ASCII)读取它来做同样的事情:

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

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

      【讨论】:

      • 实际上,如果文件不是有效的 utf8,这将引发异常。还有,它不会理解 utf16,例如
      • @timotimo 对,但原来的只是检查了 ASCII 或 UTF8。应该检查一组编码,但总体思路是一样的。
      • @jjmerelo 你的评论不同意stackoverflow.com/questions/899206/…的答案
      【解决方案3】:

      我们可以通过以下代码使用 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
      }
      

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

      【讨论】:

      • 这是一个 perl5 模块,但问题是关于 perl6 解决方案。
      • 这可以编辑成use File::Type:from<Perl5>$ft.mime_type($file)成为Perl6代码。
      猜你喜欢
      • 1970-01-01
      • 2019-04-24
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      相关资源
      最近更新 更多