C# 如何正确访问文件以追加文本(MD5hash)?
我试图在文件关闭后附加文件的MD5哈希(基于文件长度)。我是这样做的:C# 如何正确访问文件以追加文本(MD5hash)?,c#,file,md5,streamwriter,C#,File,Md5,Streamwriter,我试图在文件关闭后附加文件的MD5哈希(基于文件长度)。我是这样做的: string filePath = "myPath"; string fileName = "myFileName"; File.Delete(filePath + fileName); if (!File.Exists(filePath + fileName)) { using (var sw = File.CreateText(filePath + fileName)) { sw.Wr
string filePath = "myPath";
string fileName = "myFileName";
File.Delete(filePath + fileName);
if (!File.Exists(filePath + fileName))
{
using (var sw = File.CreateText(filePath + fileName))
{
sw.Write("Stuff to write");
}
}
using (var sw = File.AppendText(filePath + fileName))
{
sw.Write(ctx.GetMD5HashFromFile(filePath, fileName));
}
不幸的是,这不起作用,因为文件在两个using语句之间没有正确关闭。我得到以下错误:
Unhandled Exception: System.IO.IOException: The process cannot access the file '
[filePath + fileName] because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
如何正确计算MD5散列并追加文本而不出现异常?我建议使用Sha1Sum而不是MD5,因为MD5非常陈旧且不安全 此函数以“C61211674FD03175FEC87A9C01F39F72376CE104”格式返回值
PS:别忘了使用System.Security.Cryptography添加下面的using语句 我建议使用Sha1Sum而不是MD5,因为MD5非常陈旧且不安全 此函数以“C61211674FD03175FEC87A9C01F39F72376CE104”格式返回值
PS:别忘了使用System.Security.Cryptography添加下面的using语句 我建议使用Sha1Sum而不是MD5,因为MD5非常陈旧且不安全 此函数以“C61211674FD03175FEC87A9C01F39F72376CE104”格式返回值
PS:别忘了使用System.Security.Cryptography添加下面的using语句 我建议使用Sha1Sum而不是MD5,因为MD5非常陈旧且不安全 此函数以“C61211674FD03175FEC87A9C01F39F72376CE104”格式返回值
PS:别忘了使用System.Security.Cryptography添加下面的using语句 我猜您在第二段代码中打开了两次文件:
using (var sw = File.AppendText(filePath + fileName))
{
sw.Write(ctx.GetMD5HashFromFile(filePath, fileName));
}
ctx.GetMD5HashFromFile
可能会打开文件来创建哈希;但您已经打开它来添加数据。因此,使用块在文件之前创建散列。AppendText
。我猜您在第二段代码中打开了文件两次:
using (var sw = File.AppendText(filePath + fileName))
{
sw.Write(ctx.GetMD5HashFromFile(filePath, fileName));
}
ctx.GetMD5HashFromFile
可能会打开文件来创建哈希;但您已经打开它来添加数据。因此,使用
块在文件之前创建散列。AppendText
。我猜您在第二段代码中打开了文件两次:
using (var sw = File.AppendText(filePath + fileName))
{
sw.Write(ctx.GetMD5HashFromFile(filePath, fileName));
}
ctx.GetMD5HashFromFile
可能会打开文件来创建哈希;但您已经打开它来添加数据。因此,使用
块在文件之前创建散列。AppendText
。我猜您在第二段代码中打开了文件两次:
using (var sw = File.AppendText(filePath + fileName))
{
sw.Write(ctx.GetMD5HashFromFile(filePath, fileName));
}
ctx.GetMD5HashFromFile
可能会打开文件来创建哈希;但您已经打开它来添加数据。因此,在文件之前创建散列。使用块追加文本。如果创建时没有关闭文件,请尝试:
if (!File.Exists(filePath))
{
using (var sw = File.CreateText(filePath))
{
sw.Write("Stuff to write");
}
}
FileStream file = File.OpenRead(filePath);
string hashString = ctx.GetMD5HashFromFile(file);
file.Close();
File.WriteAllText(filePath, hashString);
仅在获取哈希值时打开文件进行读取:
如果创建时未关闭文件,请尝试:
if (!File.Exists(filePath))
{
using (var sw = File.CreateText(filePath))
{
sw.Write("Stuff to write");
}
}
FileStream file = File.OpenRead(filePath);
string hashString = ctx.GetMD5HashFromFile(file);
file.Close();
File.WriteAllText(filePath, hashString);
仅在获取哈希值时打开文件进行读取:
如果创建时未关闭文件,请尝试:
if (!File.Exists(filePath))
{
using (var sw = File.CreateText(filePath))
{
sw.Write("Stuff to write");
}
}
FileStream file = File.OpenRead(filePath);
string hashString = ctx.GetMD5HashFromFile(file);
file.Close();
File.WriteAllText(filePath, hashString);
仅在获取哈希值时打开文件进行读取:
如果创建时未关闭文件,请尝试:
if (!File.Exists(filePath))
{
using (var sw = File.CreateText(filePath))
{
sw.Write("Stuff to write");
}
}
FileStream file = File.OpenRead(filePath);
string hashString = ctx.GetMD5HashFromFile(file);
file.Close();
File.WriteAllText(filePath, hashString);
仅在获取哈希值时打开文件进行读取:
这是如何回答这个问题的?我想说的是,沙姆不太安全。Sha1Sum给出了40字节MD5和32字节的结果。40字节的代码比32字节的代码更难破解bytes@BasBrekelmans我建议使用Sha1Sum,这更安全,因为您已经给了anser@IsmailGunes没有人试图破解密码;这是用作校验和的。这是如何回答这个问题的?我想说的是Sha1Sum不太安全。Sha1Sum给出了40字节MD5和32字节的结果。40字节的代码比32字节的代码更难破解bytes@BasBrekelmans我建议使用Sha1Sum,这更安全,因为您已经给了anser@IsmailGunes没有人试图破解密码;这是用作校验和的。这是如何回答这个问题的?我想说的是Sha1Sum不太安全。Sha1Sum给出了40字节MD5和32字节的结果。40字节的代码比32字节的代码更难破解bytes@BasBrekelmans我建议使用Sha1Sum,这更安全,因为您已经给了anser@IsmailGunes没有人试图破解密码;这是用作校验和的。这是如何回答这个问题的?我想说的是Sha1Sum不太安全。Sha1Sum给出了40字节MD5和32字节的结果。40字节的代码比32字节的代码更难破解bytes@BasBrekelmans我建议使用Sha1Sum,这更安全,因为您已经给了anser@IsmailGunes没有人试图破解密码;这用作校验和。using块关闭exitsorry上的流,但未对其进行测试。新答案。但是Bas的答案应该是,使用区块在出口时关闭流,这是错误的。新答案。但是Bas的答案应该是,使用区块在出口时关闭流,这是错误的。新答案。但是Bas的答案应该是,使用区块在出口时关闭流,这是错误的。新答案。但巴斯的答案应该是正确的