无法在 IIS 上的 asp.net MVC 中释放文件
Can't release file in asp.net MVC on IIS
这是我创建的函数:
if (Valide())
{
try
{
File.Delete(Server.MapPath("F16client.pdf"));
}
catch
{
}
using (FileStream ms = new FileStream(Server.MapPath("F16client.pdf"), FileMode.Create, FileAccess.Write, FileShare.None))
{
PdfReader lecteur = new PdfReader(Server.MapPath("~/Formulaires/f16.pdf"));
PdfStamper etampeur = new PdfStamper(lecteur, ms);
// DO STUFF, Whatever
etampeur.FormFlattening = true;
etampeur.Close();
lecteur.Close();
System.Net.Mail.Attachment at = new Attachment(Server.MapPath("F16client.pdf"));
}
}
它在本地测试时有效,但在 IIS 上,这个 W3W 进程不会放过我的 f16client.pdf,我总是以 :
结束
The process cannot access the file 'D:\inetpub\wwwroot\Formulaire16\F16client.pdf' because it is being used by another process.
为什么该文件在 IIS 上仍在使用,而在本地测试时却没有??????
检查 IIS 上应用程序池用户的访问权限。然后使用以下代码重试:
var file = Server.MapPath("F16client.pdf")
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
这可能是权限或文件属性问题。
嗯...这里没有魔法。感谢 Feryal Badili 指出问题,电子邮件附件实际上包含资源...
所以,一个简单的:
at.Dispose();
在功能结束之前,一切都很好。是的...
它在本地工作的原因可能是因为我每次测试时都按下 stop everything
按钮,因此,每次它尝试我的功能时我都在杀死手柄。
这是我创建的函数:
if (Valide())
{
try
{
File.Delete(Server.MapPath("F16client.pdf"));
}
catch
{
}
using (FileStream ms = new FileStream(Server.MapPath("F16client.pdf"), FileMode.Create, FileAccess.Write, FileShare.None))
{
PdfReader lecteur = new PdfReader(Server.MapPath("~/Formulaires/f16.pdf"));
PdfStamper etampeur = new PdfStamper(lecteur, ms);
// DO STUFF, Whatever
etampeur.FormFlattening = true;
etampeur.Close();
lecteur.Close();
System.Net.Mail.Attachment at = new Attachment(Server.MapPath("F16client.pdf"));
}
}
它在本地测试时有效,但在 IIS 上,这个 W3W 进程不会放过我的 f16client.pdf,我总是以 :
结束The process cannot access the file 'D:\inetpub\wwwroot\Formulaire16\F16client.pdf' because it is being used by another process.
为什么该文件在 IIS 上仍在使用,而在本地测试时却没有??????
检查 IIS 上应用程序池用户的访问权限。然后使用以下代码重试:
var file = Server.MapPath("F16client.pdf")
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
这可能是权限或文件属性问题。
嗯...这里没有魔法。感谢 Feryal Badili 指出问题,电子邮件附件实际上包含资源...
所以,一个简单的:
at.Dispose();
在功能结束之前,一切都很好。是的...
它在本地工作的原因可能是因为我每次测试时都按下 stop everything
按钮,因此,每次它尝试我的功能时我都在杀死手柄。