C# 进程无法访问文件';pdf';因为它正被另一个进程使用
这是我代码的一部分:C# 进程无法访问文件';pdf';因为它正被另一个进程使用,c#,process,C#,Process,这是我代码的一部分: foreach (string str in Directory.GetFiles(MapPath("~/_Files/Upload/" + User.Identity.Name + "/"), "RS_*.*")) { MemoryStream ms = new MemoryStream(); System.Drawing.Image.FromFile(str).Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
foreach (string str in Directory.GetFiles(MapPath("~/_Files/Upload/" + User.Identity.Name + "/"), "RS_*.*"))
{
MemoryStream ms = new MemoryStream();
System.Drawing.Image.FromFile(str).Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
cmd.Parameters.Clear();
cmd.CommandText = "INSERT INTO ReportingServiceImages VALUES (@ReportingServiceID, @img)";
cmd.Parameters.AddWithValue("@ReportingServiceID", ID);
cmd.Parameters.AddWithValue("@img", ms.GetBuffer());
cmd.ExecuteNonQuery();
ms.Close();
cmd.Dispose();
File.Delete(str);
}
当我尝试删除str
此IO例外抛出时:
进程无法访问文件“pdf”,因为另一进程正在使用该文件
我能做什么?当您试图访问的文件在代码的其他部分未正确关闭时,这些类型的错误可能会出错 在尝试访问
文件之前,请确保该文件已正确关闭
希望这对您有所帮助。当您使用一次性对象(如数据库连接、文件等)时,请尝试使用以下方法
using(var file = new ...)
{
// code goes here
}
这样,当您完成与文件、数据库连接等相关的所有任务时,相应的对象将被释放,随后您可以在其他位置创建另一个对象以再次访问您的文件。在文件的情况下发生这种情况的原因非常清楚。假设您已经打开了一个文件,如果您不在那里保存任何您想要的内容,然后将其释放,则无法创建另一个打开此文件的对象。如果可能的话,会出现许多不一致之处 调用
System.Drawing.Image.FromFile(str)
将创建需要处理的
foreach (string str in Directory.GetFiles(MapPath("~/_Files/Upload/" + User.Identity.Name + "/"), "RS_*.*"))
{
using(MemoryStream ms = new MemoryStream())
using(Image img = System.Drawing.Image.FromFile(str))
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
cmd.Parameters.Clear();
cmd.CommandText = "INSERT INTO ReportingServiceImages VALUES (@ReportingServiceID, @img)";
cmd.Parameters.AddWithValue("@ReportingServiceID", ID);
cmd.Parameters.AddWithValue("@img", ms.GetBuffer());
cmd.ExecuteNonQuery();
cmd.Dispose();
}
File.Delete(str);
}
如果cmd
实际上没有在这个方法之外使用,我也会使用语句将它包装在中。我在你的例子中看不到这个定义,所以不清楚它还有什么用途