Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/23: Рейтинг темы: голосов - 23, средняя оценка - 4.74
IgrDen
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 32
#1

Ошибка: "Процесс не может получить доступ к файлу, так как этот файл используется другим процессом"

19.11.2014, 23:31. Просмотров 4189. Ответов 6
Метки нет (Все метки)

Здравствуйте! Я написал код кнопки сохранитьToolStripMenuItem, у меня в коде вылезает ошибка: Процесс не может получить доступ к файлу "C:\Users\igorDen\Documents\проба.xml", так как этот файл используется другим процессом.
Помогите, пожалуйста, исправить её, желательно кодом. Вот мой код. Заранее спасибо.


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
 private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string adr;
            Stream myStream = null;
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
 
                if ((myStream = saveFileDialog1.OpenFile()) != null)
                {
                   
 
                        adr = saveFileDialog1.FileName;
                        XmlTextWriter textWritter = new XmlTextWriter(adr, Encoding.UTF8);
                        textWritter.WriteStartDocument();
                        textWritter.WriteStartElement("Readers");
                        textWritter.WriteEndElement();
                        textWritter.Close();
 
                        XmlDocument document = new XmlDocument();
                        document.Load(adr);
 
 
                        for (int a = 0; a < dataGridView1.Rows.Count - 1; a++)
                        {
                            XmlNode Readers = document.CreateElement("tovar");
                            document.DocumentElement.AppendChild(Readers);
 
                            XmlNode row1 = document.CreateElement("Id");               row1.InnerText = dataGridView1.Rows[a].Cells[0].Value.ToString(); Readers.AppendChild(row1);
}
вот в этой строке такая ошибка: XmlTextWriter textWritter = new XmlTextWriter(adr, Encoding.UTF8);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 23:31
Ответы с готовыми решениями:

Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Моя программа должна добавлять на форму картинку, уменьшив ее до размеров...

Ошибка: Процесс не может получить доступ к файлу, так как этот файл занят другим процессом
Добрый день, в данном коде необходимо переместить файл из одной папки в другую....

Процесс не может получить доступ к файлу, т.к. этот файл используется другим процессом
Здравствуйте! Собственно есть игра с выбором пользователей, имена которых...

Процесс не может получить доступ к файлу, так как этот файл занят другим процессом
private void AvatarEditToolStripMenuItemClick(object sender, System.EventArgs...

Процесс не может получить доступ к файлу / файл используется другим процессом
После скачивания архива необходимо его в дальнейшем разархивировать, но выдаёт...

6
drondez
43 / 43 / 32
Регистрация: 15.04.2011
Сообщений: 187
19.11.2014, 23:57 #2
У тебя случаем нигде не висит процесс\поток который держит файл открытым?
0
OwenGlendower
Супер-модератор
Эксперт .NET
9057 / 8006 / 3422
Регистрация: 17.03.2014
Сообщений: 15,832
Записей в блоге: 1
20.11.2014, 15:32 #3
IgrDen, ты открываешь файл в этой строке:
C#
1
if ((myStream = saveFileDialog1.OpenFile()) != null)
Функция OpenFile открывает файл в монопольном режиме. То есть пока он открыт никто не сможет его открыть еще раз. И поэтому конструктор XmlTextWriter генерирует исключение. Кроме того подобная проверка не имеет смысла т.к. если OpenFile() не сможет открыть файл, то она сгенерирует исключение, а не вернет null.

Код лучше переписать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (saveFileDialog1.ShowDialog() != DialogResult.OK) return;
string adr = saveFileDialog1.FileName;
 
XmlDocument document = new XmlDocument();
document.LoadXml("<Readers />");
 
for (int a = 0; a < dataGridView1.Rows.Count - 1; a++)
{
    XmlNode Readers = document.CreateElement("tovar");
    document.DocumentElement.AppendChild(Readers);
 
    // ....
}
 
document.Save(adr);
0
IgrDen
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 32
20.11.2014, 18:23  [ТС] #4
Спасибо большое! Попробую переписать код.
0
fits
3 / 3 / 1
Регистрация: 08.12.2012
Сообщений: 47
24.05.2015, 17:57 #5
Помогите, плиз та же проблема и я не знаю что делать!
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
private int NotRepeat(FileStream file_input, string FileName)
        {
            MemoryStream tmp = new MemoryStream();
            int curByte;
            int nextByte;
            byte count = 1;
 
            do
            {
                count++;
                curByte = file_input.ReadByte();
                nextByte = file_input.ReadByte();
                if (nextByte != -1)
                    file_input.Position--;
                if (curByte != nextByte)
                    tmp.WriteByte((byte)curByte);
            }
            while ((curByte != nextByte) && (tmp.Length < 255) && (nextByte != -1));
 /*!здесь выбивает ошибку!!!!!!!!*/ FileStream file_output = new FileStream(FileName, FileMode.Append, FileAccess.Write);
            BinaryWriter bw = new BinaryWriter(file_output);
            bw.Write(single);
            bw.Write((byte)tmp.Length);
            bw.Write(tmp.ToArray(), 0, (int)tmp.Length);
            bw.Close();
            file_output.Close();
            return curByte;
        }
0
Даценд
Модератор
Эксперт .NET
4099 / 3918 / 2593
Регистрация: 20.04.2015
Сообщений: 7,108
24.05.2015, 20:02 #6
А file_input и file_output это один и тот же файл?
0
x29a100
0 / 0 / 0
Регистрация: 25.06.2011
Сообщений: 6
25.05.2015, 14:54 #7
Удали все левые процессы
0
25.05.2015, 14:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2015, 14:54

Запись в файл и ошибка "Процесс не может получить доступ к файлу"
Доброго времени суток! есть такой код: try { ...

System.IO.File.Create. "Файл используется другим процессом"
for (int i = 0; i &lt; 30; i++) //в цикле создаю файлы с именами из массива букв ...

"Файл используется другим процессом"
В общем суть такова: Мое WinForm приложение должно через openFileDialog...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru