我被这个例外困住了。我不确定,代码的哪一部分可能会阻止xml文件。
这是main.cs:
foreach (var po_no in DatabaseData.getPO_NOs())
{
XmlFile.serialize(DatabaseData.read(po_no));
}
foreach (var fileToSend in new DirectoryInfo(AppD_Config.getConfigKey("toSendFolder")).GetFiles())
{
Mail.Mail.send("xxxx", "xxxx", fileToSend.FullName.Split('\\').Last(), " ", fileToSend.FullName);
Debug.WriteLine("Sent mail.");
fileToSend.MoveTo(fileToSend.FullName.Replace(AppD_Config.getConfigKey("toSendFolder"), AppD_Config.getConfigKey("sentFolder")));
//EXCEPTION OCCURS RIGHT UP THIS COMMENT------------------
}
XmlFile.serialize-
public static string serialize(Order order)
{
Directory.CreateDirectory(AppD_Config.getConfigKey("toSendFolder"));
string fullPath = AppD_Config.getConfigKey("toSendFolder") + order.PO_NO + @"_epce_PO.xml";
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("structure", "ORDERS");
ns.Add("orders_structure_ver", "1");
var serializer = new XmlSerializer(order.GetType());
using (TextWriter writer = new StreamWriter(fullPath))
{
serializer.Serialize(writer, order, ns);
writer.Close();
return fullPath;
}
}
邮件发送-
public static void send(string from, string to, string subject, string message, string attachmentPath)
{
MailMessage mail = new MailMessage(from, to);
SmtpClient client = new SmtpClient();
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "smtpexch";
client.Port = 25;
mail.Attachments.Add(new Attachment(attachmentPath));
mail.Subject = subject;
mail.Body = message;
client.Send(mail);
}
老实说我找不到,是什么导致文件阻塞。这应该是所有与文件有关的代码。
其他所有东西都没有触及代码。如果您发现任何干扰方法,我可以添加其他任何内容。
谢谢。
EDIT_THE EXCEPTION
“ System.IO.IOException”类型的未处理异常发生在 mscorlib.dll
其他信息:该进程无法访问该文件,因为它 正在被另一个进程使用。
答案 0 :(得分:1)
我相信您没有适当地处理资源。试试这个:
using (SmtpClient client = new SmtpClient())
{
using (MailMessage mail = new MailMessage(from, to))
{
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "smtpexch";
client.Port = 25;
using (var attachment = new Attachment(attachmentPath))
{
mail.Attachments.Add(attachment);
mail.Subject = subject;
mail.Body = message;
client.Send(mail);
}
}
}
所有正在使用的类都实现IDisposable
接口。我相信您已经找到了为什么选择困难的方法。 :-)