Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913

Послать фаил на е-маил и удалить его с диска

25.01.2012, 10:55. Показов 2909. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Создаю отчет, посылаю его на е-маил. Хочу удалить с диска файл отчета, которыи послала. Возникает ошибка The process cannot access the file ...Report_1.pdf' because it is being used by another process. Т.е получается, что я его еше посылаю, а уже хочу удалить. Как "поймать" момент, когда фаил уже послан, т.е. "свободен"? Спасибо Вот мой код
C#
1
2
3
4
5
6
7
8
//....
               SendEmail(ServerSMTP, port, login, pass, mailFrom, mailTo, fileAttach, onlyname);//посылаю фаил
 
                
               if (File.Exists(pathAttach))
                {
                    File.Delete(pathAttach);//Error
                }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.01.2012, 10:55
Ответы с готовыми решениями:

удалить фаил введя его имя с клавы
помогите написать программу в паскале пользуясь функциями DOS!!! нужно удалить фаил введя его имя с клавы!!! препод думает что это мы...

Скачать файл с облако-маил.ру или Яндекс-диска
Запуск через планировщик заданий. Адрес ссылки известен. И закончить командой Shutdown /s (выключение). Нужно для использования ночного...

При запуске Google Chrome открываются 2 вкладки Маил ру и Поиск Маил ру
Доброго времени суток. У меня такая проблема, при каждом запуске Google Chrome открываются 2 вкладки Mail.ru и Поиск@Mail.ru. Все перерыл,...

19
84 / 84 / 10
Регистрация: 20.05.2011
Сообщений: 145
25.01.2012, 11:38
А побольше кода можно увидеть?
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
25.01.2012, 11:49  [ТС]
Да, конечно Вот код самои функци, которая посылает е-маил
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 public bool SendEmail(string serverSMTP, int port, string login,
            string pass, string mailFrom, string mailTo, string fileAttach, string subject)
        {
            try
            {
                SmtpClient Smtp = new SmtpClient(serverSMTP, port);
                Smtp.Credentials = new NetworkCredential(login, pass);
                //Message
                MailMessage Message = new MailMessage();
                Message.From = new MailAddress(mailFrom);
                Message.To.Add(new MailAddress(mailTo));
                Message.Subject = "Report_" + subject;
                Message.Body = "Report " + DateTime.Now.ToString();
 
                //Attach file
                string file = fileAttach;
                Attachment attach = new Attachment(file, MediaTypeNames.Application.Octet);
 
                // Add information from file
                ContentDisposition disposition = attach.ContentDisposition;
                disposition.CreationDate = System.IO.File.GetCreationTime(file);
                disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
                disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
 
                Smtp.Send(Message);//send
                Smtp.Dispose();
                return true;
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
                return false;
            }
        }
Потом, когда фаилы посланы(или я думаю, что посланы), хочу удалить все, что было послано. См код выше. И получаю ошибку The process cannot access the file ...Report_1.pdf' because it is being used by another process
1
 Аватар для andrew_w2k
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
25.01.2012, 11:55
try-catch-finally
0
 Аватар для dimasamchenko
336 / 269 / 21
Регистрация: 30.03.2009
Сообщений: 500
25.01.2012, 11:56
iva_a, привет!
давай для начала поймем кто держит файл- отправка или сам отчет!
прпробуй после создания файла не отправляя его сразу удалить, если не получится значит его держит отчет и отправка не причем тогда будем думать дальше
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
25.01.2012, 12:06  [ТС]
dimasamchenko, привет! Рада "видеть"! То, что ты советуешь, я уже сделала. Закоментировала отправку почты и попыталась удалить фаил Фаил удалился Так, что дело в отправке почты. Я тут подумала, может чем возиться с асинхроннои отправкои почты(есть оказывается такое) просто удалять все содержимое папки, в которую кладу временные фаилы? Но тут у меня не получается создать папку в временнои папке Т.е. делаю так
C#
1
string pathAttach = Path.Combine(Path.GetTempPath(), @"Report_" + onlyname + ".pdf");// - onlyname-нужная часть имени
, то получаю фаилы прямо в Теmp(temporary) папке
Возможно ли создать папкы в Темп папке? У меня не получилось
0
 Аватар для dimasamchenko
336 / 269 / 21
Регистрация: 30.03.2009
Сообщений: 500
25.01.2012, 12:16
Цитата Сообщение от iva_a Посмотреть сообщение
Возможно ли создать папкы в Темп папке? У меня не получилось
зачем так сложно, для начала попробуй как советовал
andrew_w2k, использовать
Цитата Сообщение от andrew_w2k Посмотреть сообщение
try-catch-finally
т.е удаление файла вынеси в блок finally ! Возможно этого будет достаточно
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
25.01.2012, 12:22  [ТС]
Получила ту же ошибку, только в блоке finally
0
 Аватар для dimasamchenko
336 / 269 / 21
Регистрация: 30.03.2009
Сообщений: 500
25.01.2012, 12:26
Цитата Сообщение от iva_a Посмотреть сообщение
Получила ту же ошибку, только в блоке finally
это хорошо! значит эту конструкцию оставляем! теперь в блоке finally перед удалением файла сделай задержку скажем на пару минут и посмотрим что будет может через некоторое время файл освободится

Задержка
C#
1
2
3
4
5
6
7
       // Чтобы  было не так быстро то ждем до 120 сек.
        int TmpT = Environment.TickCount;
        do
          {
          Application.DoEvents();
          } while ((Environment.TickCount < (TmpT + 120000)));
//Здесь пробуем удалить
1
 Аватар для andrew_w2k
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
25.01.2012, 12:27
Цитата Сообщение от dimasamchenko Посмотреть сообщение
давай для начала поймем кто держит файл- отправка или сам отчет!
значит отчёт.
можно сразу поговнокодить и выгружать систему отчётов, затем удалять файл
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
25.01.2012, 12:31  [ТС]
Уже Файл не освобождается длительное время, не хватило терпения ждать. Вообщем, перед тем как создавать новыи отчет , иду в Temp папку, и если файлы с таким именем существуютщ их удаляю без проблем Так что по моему коду(ои, не ахти - решение) в Temp папке всегда что-нибудь, да останется... МОжет кто-нибудь предложит что-то ?
0
 Аватар для dimasamchenko
336 / 269 / 21
Регистрация: 30.03.2009
Сообщений: 500
25.01.2012, 12:35
Цитата Сообщение от iva_a Посмотреть сообщение
Вообщем, перед тем как создавать новыи отчет , иду в Temp папку, и если файлы с таким именем существуютщ их удаляю без проблем Так что по моему коду(ои, не ахти - решение) в Temp папке всегда что-нибудь, да останется... МОжет кто-нибудь предложит что-то ?
ну в принципе тоже нормально, а перед закрытием приложения в обработчике формклозе чисти эту папку
0
84 / 84 / 10
Регистрация: 20.05.2011
Сообщений: 145
25.01.2012, 12:39
А я лично не вижу самого прикрепления письма!

C#
1
Message.Attachments.Add(attach);
Добавлено через 1 минуту
Вернее файла к письму!

Добавлено через 1 минуту
Может файл не освобождается потому что ждёт пока его к чему то прикрепят! А пока не прикрепили он будет занят!
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
25.01.2012, 12:42  [ТС]
SpiritRI, смотри в функции SEnd-email
C#
1
2
3
//Attach file
                string file = fileAttach;
                Attachment attach = new Attachment(file, MediaTypeNames.Application.Octet);
andrew_w2k, как понять выгружать систему отчётов ? Удалять файлы что ли?
dimasamchenko,дело еше в том, что моя программа будет состоять из 2 частеи - 1 - форма, 2 - в фоновом режиме Пока еше не знаю как совместить Ну, ладно, это потом , отдельно
0
84 / 84 / 10
Регистрация: 20.05.2011
Сообщений: 145
25.01.2012, 12:46
Я это вижу! Я вижу что создаётся новое вложение, но не присоединяется к телу письма! Оно просто создано и всё! Чтоб всё работало его надо прикрепить продемонстрированным выше кодом!

Добавлено через 50 секунд
http://csharpcoding.org/otprav... dstvami-c/
1
 Аватар для andrew_w2k
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
25.01.2012, 12:51
iva_a, я так понимаю, что у тебя для создания отчётов используется какое-то стороннее приложение?
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
25.01.2012, 12:54  [ТС]
SpiritRI
C#
1
2
3
4
5
6
7
  // Add information from file
                ContentDisposition disposition = attach.ContentDisposition;
                disposition.CreationDate = System.IO.File.GetCreationTime(file);
                disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
                disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
 
                Message.Attachments.Add(attach);
Посылается все отлично
andrew_w2k, для создания отчета использую ReportViewer control
0
 Аватар для andrew_w2k
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
25.01.2012, 13:00
iva_a, к сожалению или к счастью, не пользовался этим контролом, но думается мне, что ошибка таится в высвобождении ресурсов, занимаемым этим контролом
1
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
25.01.2012, 13:09  [ТС]
andrew_w2k, да нет, он(ReportViewer control) симпатичныи, когда разберешься Я проверила, если комментирую функцию Sendmail, то фаил удаляется без проблем. Я тут почитала про асинхронную почту, но что-то пока не дошло Зато там есть событие completed, т.е. можно получить(как я поняла) ответ, когда почта была послана. Ладно Всем - спасибо!!!
0
 Аватар для Jo-Ni-K
174 / 73 / 30
Регистрация: 20.11.2013
Сообщений: 358
25.03.2014, 08:31
Столкнулся с такой же проблемой, долго мучился, но нашел выход
C#
1
Attachments.Dispose();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2014, 08:31
Помогаю со студенческими работами здесь

программа считывающая фаил с диска
составьте программу считывающую файл с диска , в котором записана некоторая последовательность символов и, переписывающая эти символы...

Как удалить файлы посланные по маил агенту
здраствуйте друзя! помигите пожалуиста я вас очен прошу! у меня проблема! корочи я отправил другу филе по исq филес или точнее по...

Что такое указатель на фаил в делфи, как его получить и с чем его готовить
У меня вопрос я получаю имя файла вот тут procedure TForm1.Button5Click(Sender: TObject); var f_name:string; begin ...

Не могу удалить фаил
После удаления NERO 8 , не удаляется вот этот фаил , в программных файлах - NBShell.dll 3.0.3.0 Nero BasktUp И в паке &quot;мой...

Удалить и переименовать фаил
Уважаемые форумчане,подскажите как можно удалить и переименовать фаил?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru