C# 如何正确访问文件以追加文本(MD5hash)?

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

我试图在文件关闭后附加文件的MD5哈希(基于文件长度)。我是这样做的:

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的答案应该是,使用区块在出口时关闭流,这是错误的。新答案。但巴斯的答案应该是正确的