将字符串的 MD5 总和与文件内容进行比较 关于动机的无聊细节

问题描述

我正在尝试将字符串(在内存中)与文件内容进行比较,以查看它们是否相同。关于动机的无聊细节在问题下方是否有人关心。

我的困惑是,当我对文件内容进行哈希处理时,得到的结果与对字符串进行哈希处理时的结果不同。

js

想要做的只是 library(readr) library(digest) # write the string to the file the_string <- "here is some stuff" the_file <- "fake.txt" readr::write_lines(the_string,the_file) # both of these functions (predictably) give the same hash tools::md5sum(the_file) # "44b0350ee9f822d10f2f9ca7dbe54398" digest(file = the_file) # "44b0350ee9f822d10f2f9ca7dbe54398" # now read it back to a string and get something different back_to_a_string <- readr::read_file(the_file) # "here is some stuff\n" digest(back_to_a_string) # "03ed1c8a2b997277100399bef6f88939" # add a newline because that's what write_lines did orig_with_newline <- paste0(the_string,"\n") # "here is some stuff\n" digest(orig_with_newline) # "03ed1c8a2b997277100399bef6f88939" 看看它们是否相同(它们是)但是返回 digest(orig_with_newline) == digest(file = the_file) 因为,如图所示,散列是不一样。

显然,我可以使用 FALSE 将文件读回字符串或将字符串写入临时文件,但这两种方法看起来都有些愚蠢和笨拙。我想这两个实际上都是很好的解决方案,我真的只是想了解为什么会发生这种情况,以便我可以更好地了解散列的工作原理。

关于动机的无聊细节

情况是我有一个函数可以将字符串写入文件,但是如果文件已经存在,那么除非用户明确传递read_file,否则它将出错。但是,如果文件存在,我想检查即将写入文件的字符串是否实际上与文件中已有的相同。如果是这种情况,那么我将跳过错误(和写入)。可以在循环中调用此代码,如果用户不断看到此错误,即他们即将使用已在其中的相同内容覆盖文件,这将是令人讨厌的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)