Как сохранить файл в папку в приложении Windows

Я хочу отправить вложение по электронной почте, поэтому для этого я хочу сначала сохранить файл вложения в папке.

Итак, что происходит с моим текущим кодом: почта отправляется с вложением, но мой файл не сохраняется в папке ATTACHMENT.

вот код, который я пробовал

for (int i = 0; i < table.Rows.Count; i++)
        {
            if (1 == 1)
            {
                string StrPriBody = "This is a test mail for checking notification.";

                MailMessage mail = new MailMessage();
                mail.Subject = "Daily Holding followup scheduler";
                mail.From = new System.Net.Mail.MailAddress("[email protected]");
                SmtpClient smtp = new SmtpClient();
                smtp.Timeout = 1000000;
                smtp.Port = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["Port"]);
                smtp.UseDefaultCredentials = true;
                smtp.Host = System.Configuration.ConfigurationManager.AppSettings["MailHost"];
                smtp.Credentials = new NetworkCredential(mail.From.ToString(), "PS123456");
                smtp.EnableSsl = true;
                mail.To.Add(new MailAddress("[email protected]"));
                mail.IsBodyHtml = true;
                mail.Body = StrPriBody;

                DataSet ds = new DataSet();
                ds.Tables.Add(table);
                ds.Tables[0].TableName = "Post sale follow up entries auto mailer";


                SaveFileDialog save = new SaveFileDialog();
                save.InitialDirectory = "\\Attachment";
                save.RestoreDirectory = true;

                ExcelLibrary.DataSetHelper.CreateWorkbook("Employee_Details.xls", ds);

                mail.Attachments.Add(new Attachment("Employee_Details.xls"));

                smtp.Send(mail);

                foreach (Attachment attachments in mail.Attachments)
                {
                    attachments.Dispose();
                }

person learner    schedule 21.04.2016    source источник
comment
И почему ваш файл должен быть сохранен в папке вложений? Как вы говорите своей ExcelLibrary создать файл в этой папке?   -  person Steve    schedule 21.04.2016
comment
@Steve: я понятия не имею, как создать это в папке? любая помощь   -  person learner    schedule 21.04.2016
comment
Для этого вам не нужен диалог SaveFile (и в вашем коде вы определяете его, но не используете). Просто используйте File.Copy   -  person Pikoh    schedule 21.04.2016
comment
Вызов CreateWorkBook принимает имя файла, но без пути файл создается (вероятно) в текущем каталоге. Конструктор вложения находит файл по той же причине, вы не указываете папку, и поэтому ожидается, что файл находится в текущем каталоге. Если вы хотите добавить путь к вложению, вам следует использовать Path.Combine, чтобы добавить его к вашему имени файла.   -  person Steve    schedule 21.04.2016
comment
Вам даже не нужно сохранять файл на диск, так как клиент .Net Mail может добавлять вложения непосредственно из MemoryStream при условии, что вы добавляете MIME-тип и имя.   -  person Adwaenyth    schedule 21.04.2016
comment
@Pikoh: любая помощь с кодом была бы здоровой   -  person learner    schedule 21.04.2016
comment
@Steve: извините, сэр, вас не понял. Некоторый код был бы отличным   -  person learner    schedule 21.04.2016
comment
@Adwaenyth: можешь показать какой-нибудь код, это было бы здорово   -  person learner    schedule 21.04.2016
comment
@learner есть статья об использовании документов Open XML в памяти здесь и здесь объясняется, как использовать MemoryStream для добавления вложения в письмо.   -  person Adwaenyth    schedule 21.04.2016
comment
@Adwaenyth: спасибо, обязательно посмотрю!   -  person learner    schedule 21.04.2016


Ответы (2)


Для этого вам не нужен SaveFileDialog (и в вашем коде вы определяете его, но не используете). Просто используйте File.Copy< /а>. Итак, после создания вашей рабочей книги здесь:

ExcelLibrary.DataSetHelper.CreateWorkbook("Employee_Details.xls", ds);

Просто добавьте что-то вроде:

File.Copy("Employee_Details.xls","\\Attachment\Employee_Details.xls");
person Pikoh    schedule 21.04.2016

1) Почему вы используете SaveFileDialog? Пользователь должен выбрать папку и имя файла для сохранения? Затем вы забыли «отобразить» диалоговое окно, и после того, как пользователь закроет его, извлеките из него выбранное имя папки/файла и (предпочтительно) используйте полный путь (C:\Folder\File...) для CreateWorkbook и new Attachment(...).

2) Вы уверены, что после вызова ExcelLibrary.DataSetHelper.CreateWorkbook этот файл действительно записывается на диск с содержимым? Может быть, вам нужно вызвать какие-то Save() методы? (это зависит от библиотеки, читайте в документах библиотеки)

3) Вы уверены, что после вызова ExcelLibrary.DataSetHelper.CreateWorkbook новый файл закрывается/разблокируется путем написания кода? Может быть, вам нужно Dispose что-то? (опять же, проверьте документы библиотеки)

4) Вы тестируете на сервере (веб-сайте?) или на настольном компьютере? Убедитесь, что вы можете записать доступ к папке, в которой вы хотите сохранить файл.

person Dmitry    schedule 21.04.2016
comment
я тестирую на настольном компьютере, я хочу, чтобы почта была отправлена ​​​​с вложением excel, а вложение shd также попало в папку - person learner; 21.04.2016