我无法删除图片文件,因为它已被其他进程使用

时间:2019-10-06 23:16:08

标签: c# asp.net asp.net-mvc model-view-controller asp.net-core-mvc

我无法删除图像文件,因为它在创建后由其他进程使用。问题发生在我的进程正在运行时。如何终止打开文件的进程,以便其他进程可以访问它?

我使用以下代码创建了图像文件:

string uploads = Path.Combine(Hosting.WebRootPath, "uploads");
string fullPath = Path.Combine(uploads, fileName);
entity.file.CopyTo(new FileStream(fullPath, FileMode.Create));FileMode.Create));

image description 1

在我停止在VS中运行项目之前,文件浏览器无法读取图像文件java-logo-png-300x300

image description 2

3 个答案:

答案 0 :(得分:2)

对于问题的所在有些困惑,但是从外观上看,您永远不会关闭FileStream。以这种方式打开文件流时,文件的ShareMode设置为None(无),因此没有其他进程可以读取/写入/删除文件。您真正需要做的就是更改最后一行:

entity.file.CopyTo(new FileStream(fullPath, FileMode.Create));

//Opens the file
using (FileStream stream = new FileStream(fullPath, FileMode.Create))
{
    //Copies data from entity.file to stream
    entity.file.CopyTo(stream);
}
//File was released (disposed of) thanks to the using statement

复制完成后,文件将被释放,以便其他进程可以访问它。

答案 1 :(得分:0)

您不能这样做。但是,您可以等到过程完成后,才可以使用FileInfo.IsFileLocked()来验证文件是否正在使用中。

示例代码:

public static void Test(){
    FileInfo inf = new FileInfo("your_file");

    while (inf.IsFileLocked()) {
      Console.WriteLine("File locked, wait...");
    };
}

重要提示:请记住每次打开流都将其关闭,因为这可能会导致文件锁定。

答案 2 :(得分:0)

如图所示,一个原因可能是您没有将stream语句包装在using块中,或者没有将它们手动处理。