用于验证2系统中的文件大小。我确实创建了像elixir中的一样的代码
def file_md5_creator do
filepath = "/Users/shahryar/Desktop/test.jpg"
File.stream!(filepath) |>
Enum.reduce(:crypto.hash_init(:md5),
fn(line, acc) -> :crypto.hash_update(acc,line) end ) |>
:crypto.hash_final |> Base.encode16(case: :lower)
end
但是elix md5创建者没有设置Bash md5
elixir md5:ee4ed0f9c357b7d803d08f7d75dd983b
bash:53a3107b118854f20c5af6269a434981
bash command =
md5 /Users/shahryar/Desktop/test.jpg
我的操作系统:mac
请求帮我解决问题
答案 0 :(得分:1)
File.stream!
默认读取" line"中的文件将"\r\n"
换行符序列规范化为"\n"
的模式。
iex(1)> File.write!("a", "a\r\nb\r\nc")
:ok
iex(2)> File.read!("a")
"a\r\nb\r\nc"
iex(3)> File.stream!("a") |> Enum.into("")
"a\nb\nc"
要使File.stream!
不这样做,可以通过指定一个整数作为第三个参数(即一次读取的字节数),使其以字节模式读取。
iex(4)> File.stream!("a", [], 16384) |> Enum.into("")
"a\r\nb\r\nc"
您的图片在多个位置包含"\r\n"
,这意味着原始数据已被File.stream!
损坏,并且您获得了错误的MD5哈希值。如果您将File.stream!
调用的第三个参数更改为整数,它应该可以正常工作:
File.stream!(filepath, [], 16384) |>