文件被什么阻止了吗?

时间:2018-11-08 14:05:53

标签: 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_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

     

其他信息:该进程无法访问该文件,因为它   正在被另一个进程使用。

1 个答案:

答案 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接口。我相信您已经找到了为什么选择困难的方法。 :-)