文件已被另一个进程使用
File is already in use by another process
我对以下代码 C# 有疑问,我必须通过电子邮件发送由报表查看器生成的文件,但是当我发送电子邮件时,程序会生成异常,提示文件已被另一个进程使用。我该如何解决?我把代码和错误放在下面。
错误:
该进程无法访问 C:/Temp/ordine.pdf,因为它已被另一个进程使用!
C# 代码:
try
{
string subPath = "C:/Temp/";
if (!Directory.Exists(subPath))
{
Directory.CreateDirectory(subPath);
}
string filepath = "C:/Temp/ordine.pdf";
byte[] bytes = reportViewerOrdine.LocalReport.Render("PDF", null);
using (FileStream fs = new FileStream(filepath, FileMode.Create))
{
fs.WriteAsync(bytes, 0, bytes.Length);
fs.Close();
}
//Invio l'email
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("mail.server.com");
mail.From = new MailAddress(u.GetEmail());
mail.To.Add(myemail);
mail.Subject = "--";
mail.Body = "--";
System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment("C:/Temp/ordine.pdf");
mail.Attachments.Add(attachment);
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential(u.GetEmail(), u.GetPassword());
SmtpServer.EnableSsl = false;
SmtpServer.Send(mail);
File.Delete(@"C:/Temp/ordine.pdf");
MessageBox.Show("Email send");
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex);
}
我遇到过许多 Excel 文件,但只要我将它们置于只读模式,它们就会起作用。试试这个:
FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
您根本不需要使用文件。您已经在字节数组中包含了附件内容,所以只需:
attachment = new System.Net.Mail.Attachment(new MemoryStream(bytes), "ordine.pdf" );
完全删除以下代码行:
string subPath = "C:/Temp/";
if (!Directory.Exists(subPath))
{
Directory.CreateDirectory(subPath);
}
string filepath = "C:/Temp/ordine.pdf";
using (FileStream fs = new FileStream(filepath, FileMode.Create))
{
fs.WriteAsync(bytes, 0, bytes.Length);
fs.Close();
}
File.Delete(@"C:/Temp/ordine.pdf");
我对以下代码 C# 有疑问,我必须通过电子邮件发送由报表查看器生成的文件,但是当我发送电子邮件时,程序会生成异常,提示文件已被另一个进程使用。我该如何解决?我把代码和错误放在下面。
错误:
该进程无法访问 C:/Temp/ordine.pdf,因为它已被另一个进程使用!
C# 代码:
try
{
string subPath = "C:/Temp/";
if (!Directory.Exists(subPath))
{
Directory.CreateDirectory(subPath);
}
string filepath = "C:/Temp/ordine.pdf";
byte[] bytes = reportViewerOrdine.LocalReport.Render("PDF", null);
using (FileStream fs = new FileStream(filepath, FileMode.Create))
{
fs.WriteAsync(bytes, 0, bytes.Length);
fs.Close();
}
//Invio l'email
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("mail.server.com");
mail.From = new MailAddress(u.GetEmail());
mail.To.Add(myemail);
mail.Subject = "--";
mail.Body = "--";
System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment("C:/Temp/ordine.pdf");
mail.Attachments.Add(attachment);
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential(u.GetEmail(), u.GetPassword());
SmtpServer.EnableSsl = false;
SmtpServer.Send(mail);
File.Delete(@"C:/Temp/ordine.pdf");
MessageBox.Show("Email send");
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex);
}
我遇到过许多 Excel 文件,但只要我将它们置于只读模式,它们就会起作用。试试这个:
FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
您根本不需要使用文件。您已经在字节数组中包含了附件内容,所以只需:
attachment = new System.Net.Mail.Attachment(new MemoryStream(bytes), "ordine.pdf" );
完全删除以下代码行:
string subPath = "C:/Temp/";
if (!Directory.Exists(subPath))
{
Directory.CreateDirectory(subPath);
}
string filepath = "C:/Temp/ordine.pdf";
using (FileStream fs = new FileStream(filepath, FileMode.Create))
{
fs.WriteAsync(bytes, 0, bytes.Length);
fs.Close();
}
File.Delete(@"C:/Temp/ordine.pdf");