【问题标题】:ASP.NET Can't Perform Operation on file because it is being used by another process?ASP.NET 无法对文件执行操作,因为它正被另一个进程使用?
【发布时间】:2014-05-23 14:22:25
【问题描述】:

我已经在此站点上搜索了有关为什么该进程无法访问该文件的解决方案,因为它正被另一个进程使用。不幸的是,他们似乎都有针对他们问题的非常具体的答案(如电子邮件附件)。所以,我想我会在这里发帖,也许可以帮助我解决我的问题。这段代码的最终目标是获取文件的 sha256 哈希并将文件保存在磁盘上。

string hashedfile1name="";
string hashedfile2name="";
FileStream fs = null;
HashAlgorithm hash = new SHA256Managed();
if (FileUpload1.HasFile)
    try
    {
        FileUpload1.SaveAs("C:\\Uploads\\" + FileUpload1.FileName);
        fs = File.OpenRead("C:\\Uploads\\" + FileUpload1.FileName);
        byte[] bytes = new byte[fs.Length];
        fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
        hashedfile1name = hash.ComputeHash(bytes).ToString();
        File.Delete("C:\\Uploads\\" + FileUpload1.FileName);

        Label1.Text = "File name: " + FileUpload1.PostedFile.FileName + " - " + hashedfile1name;
    } catch (Exception ex) {
        Label1.Text = "ERROR: " + ex.Message.ToString();
    }

【问题讨论】:

  • 您打开了一个文件以供读取,并且您正试图将其删除。在 open 周围放一个using 并阅读,然后在它之外删除。

标签: c# asp.net process cryptography sha256


【解决方案1】:

确保在阅读完文件后将其处理掉 - 即关闭蒸汽:

using (fs = File.OpenRead("C:\\Uploads\\" + FileUpload1.FileName))
{
    byte[] bytes = new byte[fs.Length];
    fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
    hashedfile1name = hash.ComputeHash(bytes).ToString();
}
// Now you can delete it
File.Delete("C:\\Uploads\\" + FileUpload1.FileName);

【讨论】:

  • 感谢您的代码。它有效并且值得正确的标记。另外,当我使用 hashedfile1name 保存文件时,文件被保存为 System.Byte[],这是为什么呢?
  • 哦等等 nvm 我用这个修复了它: hashedfile1name = Convert.ToBase64String(hash.ComputeHash(bytes));
【解决方案2】:

您必须在删除之前关闭()文件流。

【讨论】:

    【解决方案3】:

    您需要在删除文件之前关闭 FileStream。

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 2019-05-24
      • 1970-01-01
      • 2012-08-04
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多