.NET 4.x Процесс не может получить доступ к файлу "C:\Pro\Setting\NameFunction.txt", так как этот файл используется другим процессом - C#
Формулировка задачи:
Помогите, пожалуйста, не могу понять в чем причина.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
using Function_Interface;
namespace System_MRT
{
public partial class Form2 : Form
{
string[] FileNames;
string PathFile;
string backupDir;
string FileSetting;
Stream myStream;
public Form2()
{
InitializeComponent();
}
public void Test_Function()
{
for (int j = 0; j < FileNames.Length; j++)
{
try
{
Assembly x = Assembly.LoadFrom(PathFile + @"\" + FileNames[j]);
string NamesSpase_DLL = FileNames[j].Substring(0, FileNames[j].Length - 3);
Type t = x.GetType(NamesSpase_DLL + "Class1");
if (t != null)
{
object func = Activator.CreateInstance(t, null);
if (func is IFunction)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[j].Cells[0].Value = FileNames[j];
}
else MessageBox.Show("Выбранная функция не реализуеи интерфейс IFunction", "Warning");
}
}
catch { MessageBox.Show("File not load ", "Warning"); }
}
}
public void Test_ScalarCalc()
{
for (int j = 0; j < FileNames.Length; j++)
{
try
{
Assembly x = Assembly.LoadFrom(PathFile + @"\" + FileNames[j]);
string NamesSpase_DLL = FileNames[j].Substring(0, FileNames[j].Length - 3);
Type t = x.GetType(NamesSpase_DLL + "Class1");
if (t != null)
{
object func = Activator.CreateInstance(t, null);
if (func is IScalarCalc)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[j].Cells[0].Value = FileNames[j];
}
else MessageBox.Show("Выбранная функция не реализуеи интерфейс IScalarCalc", "Warning");
}
}
catch { MessageBox.Show("File not load ", "Warning"); }
}
}
public void Test_Method()
{
for (int j = 0; j < FileNames.Length; j++)
{
try
{
Assembly x = Assembly.LoadFrom(PathFile + @"\" + FileNames[j]);
string NamesSpase_DLL = FileNames[j].Substring(0, FileNames[j].Length - 3);
Type t = x.GetType(NamesSpase_DLL + "Class1");
if (t != null)
{
object func = Activator.CreateInstance(t, null);
if (func is IMethod)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[j].Cells[0].Value = FileNames[j];
}
else MessageBox.Show("Выбранная функция не реализуеи интерфейс IMethod", "Warning");
}
}
catch { MessageBox.Show("File not load ", "Warning"); }
}
}
public void Test_Accuracy()
{
for (int j = 0; j < FileNames.Length; j++)
{
try
{
Assembly x = Assembly.LoadFrom(PathFile + @"\" + FileNames[j]);
string NamesSpase_DLL = FileNames[j].Substring(0, FileNames[j].Length - 3);
Type t = x.GetType(NamesSpase_DLL + "Class1");
if (t != null)
{
object func = Activator.CreateInstance(t, null);
if (func is IMethod)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[j].Cells[0].Value = FileNames[j];
}
else MessageBox.Show("Выбранная функция не реализуеи интерфейс IMethod", "Warning");
}
}
catch { MessageBox.Show("File not load ", "Warning"); }
}
}
public void File_Write()
{
if (comboBox1.SelectedIndex == 0) { backupDir = @"C:\Pro\Function\"; FileSetting = "NameFunction.txt"; }
if (comboBox1.SelectedIndex == 1) { backupDir = @"C:\Pro\Method\"; FileSetting = "NameMethod.txt"; }
if (comboBox1.SelectedIndex == 2) { backupDir = @"C:\Pro\ScalarCalc\"; FileSetting = "NameScalarCalc.txt"; }
if (comboBox1.SelectedIndex == 3) { backupDir = @"C:\Pro\Accuracy\"; FileSetting = "NameAccuracy.txt"; }
string f = @"C:\Pro\Setting\" + FileSetting;[SPOILER][SPOILER][/SPOILER][/SPOILER]
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
File.Move(PathFile + @"\" + dataGridView1[0, i].Value.ToString(), backupDir + dataGridView1[0, i].Value.ToString());
File.AppendAllText(f, "|" + dataGridView1[0, i].Value.ToString() + "|" + dataGridView1[1, i].Value.ToString());
}
MessageBox.Show("Add module is fine");
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == pass.Text)
{
panel2.Visible = false;
panel1.Visible = true;
}
else
{
MessageBox.Show("No correct password !!!", "ERROR");
textBox1.Text = "";
}
}
private void button2_Click(object sender, EventArgs e)
{
pass.Text = textBox2.Text;
label4.Visible = true;
pass.Visible = true;
}
private void Load_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedItem != null)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = openFileDialog1.OpenFile()) != null)
{
// openFileDialog1.ShowDialog();
FileNames = openFileDialog1.SafeFileNames;
PathFile = Path.GetDirectoryName(openFileDialog1.FileName);
myStream.Close();
if (comboBox1.SelectedIndex == 0) Test_Function();
if (comboBox1.SelectedIndex == 1) Test_Method();
if (comboBox1.SelectedIndex == 2) Test_ScalarCalc();
if (comboBox1.SelectedIndex == 3) Test_Accuracy();
}
}
}
else MessageBox.Show("Select module", "Warning");
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
dataGridView1.Rows.Clear();
}
private void button3_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
if (dataGridView1[1, i].Value == null)
{
MessageBox.Show("Enter name for DLL ", "Warning");
break;
}
else File_Write();
}
}
}
}Решение задачи: «.NET 4.x Процесс не может получить доступ к файлу "C:\Pro\Setting\NameFunction.txt", так как этот файл используется другим процессом»
textual
Листинг программы
void File_Write()
{
if (comboBox1.SelectedIndex == 0) { backupDir = @"C:\Pro\Function\"; FileSetting = "NameFunction.txt"; }
if (comboBox1.SelectedIndex == 1) { backupDir = @"C:\Pro\Method\"; FileSetting = ".txt"; }
if (comboBox1.SelectedIndex == 2) { backupDir = @"C:\Pro\ScalarCalc\"; FileSetting = "NameScalarCalc.txt"; }
if (comboBox1.SelectedIndex == 3) { backupDir = @"C:\Pro\Accuracy\"; FileSetting = ".txt"; }
string f = @"C:\Pro\Setting\" + FileSetting;
string line = "";
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
File.Move(PathFile + @"\" + dataGridView1[0, i].Value.ToString(), backupDir + dataGridView1[0, i].Value.ToString());
line = line + "|" + dataGridView1[0, i].Value.ToString() + "|" + dataGridView1[1, i].Value.ToString();
}
File.AppendAllText(f, line);
MessageBox.Show("Add module is fine");
}