我无法删除图像文件,因为它在创建后由其他进程使用。问题发生在我的进程正在运行时。如何终止打开文件的进程,以便其他进程可以访问它?
我使用以下代码创建了图像文件:
string uploads = Path.Combine(Hosting.WebRootPath, "uploads");
string fullPath = Path.Combine(uploads, fileName);
entity.file.CopyTo(new FileStream(fullPath, FileMode.Create));FileMode.Create));
在我停止在VS中运行项目之前,文件浏览器无法读取图像文件java-logo-png-300x300
。
答案 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块中,或者没有将它们手动处理。