C# 文件没有被阻止?
我被这个例外困住了。我不确定,我的代码的哪一部分可能阻塞了xml文件 这是main.cs:C# 文件没有被阻止?,c#,email,serialization,streamwriter,C#,Email,Serialization,Streamwriter,我被这个例外困住了。我不确定,我的代码的哪一部分可能阻塞了xml文件 这是main.cs: foreach (var po_no in DatabaseData.getPO_NOs()) { XmlFile.serialize(DatabaseData.read(po_no)); } foreach (var fileToSend in new DirectoryInfo(AppD_Con
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);
}
我无法找到导致文件阻塞的原因。这应该是所有与文件有关的代码
其他一切都不涉及代码。如果你觉得任何方法令人不安,我可以补充任何其他内容
提前谢谢
编辑异常
中发生类型为“System.IO.IOException”的未处理异常
mscorlib.dll
其他信息:进程无法访问该文件,因为它
正在被另一个进程使用
我认为你没有适当地配置资源。试试这个:
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
接口。我相信你已经找到了困难的原因。:-) @J.vanLangen我尝试在mail.send之后放置Thread.sleep(5000),电子邮件到达我的收件箱,但5秒钟后,同样的异常发生。因此,我不明白smtp阻止文件发送的原因。对于发生异常的那一行,您到底想实现什么?@LittleBit我需要找出,我的代码的哪一部分以某种方式阻止文件发送。发布异常详细信息如何?您有一个错误,但我们不知道错误是什么,只是您认为它是什么。请发布异常堆栈,而不仅仅是错误消息。好的,这是一个困难的问题。我将不得不重新搜索哪些类是可识别的,该死的,我不知道附件是。谢谢