Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 30.07.2018
Сообщений: 61
1

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

01.07.2019, 11:48. Показов 5786. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
У меня есть 2 таймера. 1 таймер каждые 5 секунд скачивает файл с сервера по фтп. А 2 таймер каждые 8 секунд проверяет что написано в скачанном файле, и в зависимости от того, что там написано, он выполняет указанные действия. То есть если там написано 1, то мы выводим сообщение с текстом "1", если там написано 2, то мы выводим сообщение с текстом "2" и так далее.
Так вот, эти 2 таймера вместе работать не могут. Ошибка такая:
Процесс не может получить доступ к файлу "D:\cmd.txt", так как этот файл используется другим процессом.
А вот собственно весь код


Кликните здесь для просмотра всего текста

Код
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Linq;
using System.Threading;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;


namespace serv
{
	public partial class MainForm : Form
	{
		public MainForm()
		{
			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
     		this.ShowInTaskbar = false;
    		this.Load += new EventHandler(Form1_Load);

			System.Threading.Timer timer = new System.Threading.Timer((t) => 
				{
			FtpWebRequest request = (FtpWebRequest)WebRequest.Create("фтп/cmd.txt");
			request.Method = WebRequestMethods.Ftp.DownloadFile;
			request.Credentials = new NetworkCredential("логин", "пароль");
			FtpWebResponse response = (FtpWebResponse)request.GetResponse();
			Stream responseStream = response.GetResponseStream();
			FileStream fs = new FileStream("D://cmd.txt", FileMode.Create);
			byte[] buffer = new byte[64];
			int size = 0;
			while ((size = responseStream.Read(buffer, 0, buffer.Length)) > 0)
			{
				fs.Write(buffer, 0, size);

			}
			fs.Close();
			response.Close();	
			    });
			timer.Change(5000, 5000);
			System.Threading.Timer timer1 = new System.Threading.Timer((t) =>
				{                                                 	
			        if (File.Exists("D:\\cmd.txt"))
			        using (StreamReader SR = new StreamReader("D:\\cmd.txt"))
			switch(SR.ReadLine())
            {
                case "1": MessageBox.Show("1"); break;
                case "2": MessageBox.Show("2"); break;
                case "3": MessageBox.Show("3"); break;
                case "4": MessageBox.Show("4"); break;
            }
			    });
			timer1.Change(8000, 8000);
			
						
		}
		  		void Form1_Load(object sender, EventArgs e)
  			{
     			this.Size = new Size(0, 0);
  			}
	}
}

Мне нужно чтобы это работало так, как я сказал вначале. Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2019, 11:48
Ответы с готовыми решениями:

Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Программа отправляет на сервер сообщение из файла(должна), но выдаёт исключение "Процесс не может...

Процесс не может получить доступ к файлу так как этот файл используется другим процессом
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Не удалось скопировать файл. Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Ошибка 1 не удалось скопировать файл "obj\x86\Debug\ConsoleApplication1.exe" в...

Процесс не может получить доступ к файлу "C:\Pro\Setting\NameFunction.txt", так как этот файл используется другим процессом
Помогите, пожалуйста, не могу понять в чем причина. using System; using...

4
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
01.07.2019, 11:52 2
Лучший ответ Сообщение было отмечено Артур Миронов как решение

Решение

зачем таймер на проверку? после того как файл полностью загрузится, просто читайте его
0
0 / 0 / 0
Регистрация: 30.07.2018
Сообщений: 61
01.07.2019, 11:59  [ТС] 3
Immo, кодом можно?
0
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
01.07.2019, 12:10 4
Лучший ответ Сообщение было отмечено Артур Миронов как решение

Решение

как то так
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
35
36
37
38
private void SwitchSomething(string Command)
        {
            switch (Command)
            {
                case "1": MessageBox.Show("1"); break;
                case "2": MessageBox.Show("2"); break;
                case "3": MessageBox.Show("3"); break;
                case "4": MessageBox.Show("4"); break;
            }
        }
 
        private string ReadFile(string FPath)
        {
            if (File.Exists(FPath))
                using (StreamReader SR = new StreamReader(FPath))
                    return SR.ReadLine();
            else
                return null;
        }
 
        private void DownloadFileFTP()
        {
            string inputfilepath = @"куда сохраняем";
            string ftphost = "айпи";
            string ftpfilepath = "файл на фтп";
            string ftpfullpath = "ftp://" + ftphost + ftpfilepath;
            using (WebClient request = new WebClient())
            {
                request.Credentials = new NetworkCredential("юзер", "пароль");
                byte[] fileData = request.DownloadData(ftpfullpath);
                using (FileStream file = File.Create(inputfilepath))
                {
                    file.Write(fileData, 0, fileData.Length);
                    file.Close();
                }
                SwitchSomething(ReadFile(inputfilepath));
            }
        }
Добавлено через 2 минуты
и соответственно просто вызывайте DownloadFileFTP() через нужный промежуток времени
1
0 / 0 / 0
Регистрация: 30.07.2018
Сообщений: 61
01.07.2019, 14:58  [ТС] 5
спасибо
0
01.07.2019, 14:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2019, 14:58
Помогаю со студенческими работами здесь

File.Create(). Процесс не может получить доступ к файлу , так как этот файл используется
Здравствуйте. Выполняю код using System; using System.IO; using System.Text; namespace...

Не удалось получить доступ к файлу так как он используется другим процессом
Здраствуйте вознилка роблема не удалось получить доступ к файлу так как этот файл используется...

Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Моя программа сначала открывает картинку, а потом её удаляет(должна). Вылезает "Процесс не может...

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

Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Вот такой код using (FileStream sw = new FileStream(fileName, FileMode.OpenOrCreate,...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru