Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2015, 00:51   #1
vovaza29
Пользователь
 
Регистрация: 10.07.2015
Сообщений: 40
По умолчанию Файл занят другим процессом

Вопрос довольно-таки банальный, но я никак не могу его решить. Дело обстоит так: у меня в цикле при первом проходе файл удаляется, другой копируется на его место - всё в порядке. При втором проходе на этапе удаления ошибка занятости файла другим процессом.
Каким образом можно вызвать что-то вроде Dispose после удаления/копирования?
vovaza29 вне форума Ответить с цитированием
Старый 26.08.2015, 07:44   #2
Akeloya
Форумчанин
 
Регистрация: 27.01.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от vovaza29 Посмотреть сообщение
Вопрос довольно-таки банальный, но я никак не могу его решить. Дело обстоит так: у меня в цикле при первом проходе файл удаляется, другой копируется на его место - всё в порядке. При втором проходе на этапе удаления ошибка занятости файла другим процессом.
Каким образом можно вызвать что-то вроде Dispose после удаления/копирования?
Поскольку вы и кода не привели, будем считать что вы не в курсе про мсдн, для начала посмотрите пример:
https://msdn.microsoft.com/ru-ru/lib...v=VS.110).aspx

А вообще, у объектов либо есть метод Dispose либо нет. Если нет, вы можете переменной присвоить null, а затем сборщику мусора явно указать, что мусор нужно собрать GC.Collect (как-то так).

Но и по тому, что вы написали, не совсем понятно, чем вас перезапись не устраивает? Копируйте с перезаписью существующего файла, если он есть - перезапишется, если нет - создастся новый.

Но в целом, ошибка возникает по одной из двух причин - либо вы неправильно завершили копирование файла, как вариант открывали один файл, а затем поток файла писали в новое место и не закрывали этот поток , либо копирование не было завершено по каким-то другим причинам (что маловероятно).
Akeloya вне форума Ответить с цитированием
Старый 26.08.2015, 13:14   #3
vovaza29
Пользователь
 
Регистрация: 10.07.2015
Сообщений: 40
По умолчанию

Вот кусок кода с использованием FileStream:
Код:
byte[] tempByte1=new byte[1024];
                            wordapp.Quit();
                            using (FileStream fstream = new FileStream(PathToTitulListFile, FileMode.Open))
                            {
                                tempByte1=new byte[fstream.Length];
                                fstream.Read(tempByte1,0,tempByte1.Length);
                                fstream.Dispose();
                            }
                            using (FileStream fstream = new FileStream(pathToCurrentPredmetFolder + "/tempdirectory/Титульный лист.doc", FileMode.Create))
                            {
                                fstream.Write(tempByte1,0,tempByte1.Length);
                                fstream.Dispose();
                            }
Вроде как всё закрываю. Работаю параллельно в этой же программе с Word, строкой wordapp.Quit() поток ворда вроде как закрывется. Вообще, как мне кажется, во всём виноват ворд, но я уже все что только можно было позакрывал...
vovaza29 вне форума Ответить с цитированием
Старый 26.08.2015, 13:23   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А ты проверь - ворду перед этими действиями завершай однозначно. Или просто ее не запускай пока.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.08.2015, 13:27   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Дык ошибка при открытии того файла, который в ворде открыт был?

Ну может и правда после Quit еще какое-то время не отпущен файл. Попробуйте Thread.Sleep несколько секунд, если после этого работает, то можно сделать какой-нибудь цикл пока не получится записать (может быть с каким-нибудь ограничением по времени или кол-ву попыток).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.08.2015, 13:48   #6
vovaza29
Пользователь
 
Регистрация: 10.07.2015
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Дык ошибка при открытии того файла, который в ворде открыт был?

Ну может и правда после Quit еще какое-то время не отпущен файл. Попробуйте Thread.Sleep несколько секунд, если после этого работает, то можно сделать какой-нибудь цикл пока не получится записать (может быть с каким-нибудь ограничением по времени или кол-ву попыток).
Не помогло. Ищу решение проблемы дальше...
vovaza29 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить каким процессом занят файл SibBear Win Api 4 24.01.2020 01:50
Занят другим процессом _ZixeL_ Общие вопросы Delphi 1 04.11.2012 22:59
Этот файл занят другим процессом alkador Общие вопросы Delphi 5 26.06.2012 21:27
Как скопировать файл, который занят другим приложением? Greek9000 Общие вопросы Delphi 3 09.02.2011 11:28
Файл занят другим процессом Adonidi Общие вопросы Delphi 4 25.03.2010 21:38