Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET可以';无法对文件执行操作,因为另一个进程正在使用该文件?_C#_Asp.net_Process_Cryptography_Sha256 - Fatal编程技术网

C# ASP.NET可以';无法对文件执行操作,因为另一个进程正在使用该文件?

C# ASP.NET可以';无法对文件执行操作,因为另一个进程正在使用该文件?,c#,asp.net,process,cryptography,sha256,C#,Asp.net,Process,Cryptography,Sha256,我在这个网站上搜索了一些解决方案,来解释为什么进程无法访问该文件,因为它正被另一个进程使用。不幸的是,他们似乎都有非常具体的问题答案(如电子邮件附件)。所以,我想我会在这里发帖,也许能得到一些帮助来解决我的问题。这段代码的最终目标只是获取文件的sha256散列并将文件保存在磁盘上 string hashedfile1name=""; string hashedfile2name=""; FileStream fs = null; HashAlgorithm hash = new SHA256Ma

我在这个网站上搜索了一些解决方案,来解释为什么进程无法访问该文件,因为它正被另一个进程使用。不幸的是,他们似乎都有非常具体的问题答案(如电子邮件附件)。所以,我想我会在这里发帖,也许能得到一些帮助来解决我的问题。这段代码的最终目标只是获取文件的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();
    }

确保在读取文件后进行处理-即关闭蒸汽:

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));