如果您有2个文件,一个是文本,另一个是二进制文件,是否可以使用Crystal确定哪个文件是文本文件,哪个文件是二进制文件?
您可以使用幻数来检测二进制文件,否则它可以是纯文本文件。
使用Crystal是否可以确定哪个是文本文件,哪个是二进制文件?
如果假设“二进制”是ELF文件,则可以尝试以下操作:
def filetype(filename)
unless File.file?(filename)
puts "Isn't a file!"
return
end
File.open(filename, "r") do |f|
case f.gets(4)
when "\x7FELF" then puts "Is an ELF binary file"
# when "GIF8" then puts "Is a GIF"
# when "\x25\x50\x44\x46" then puts "Is a PDF"
# ... and so on
else
puts "Probably is a plain text file"
end
end
end
File.write("plain.txt", "Plain Text File")
filetype("plain.txt") # => Probably is a plain text file
filetype("/usr/bin/ls") # => Is an ELF binary file
filetype("/dev/sda") # => Isn't a file!
Run Code Online (Sandbox Code Playgroud)
即使在不可执行的ELF文件上(x未经许可),该功能也可以使用。如果要检测可执行文件,请使用File.executable?。
演示在这里:https : //carc.in/#/r/44a2
这file也是一个很好的命令,它libmagic在后台使用来检测幻数并获取正确的文件类型。您还可以对libmagic使用Crystal 进行一些绑定,因此您无需自己指定所有魔术数字。
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |