文件进程问题
我今天编程出现了一个问题。他说 文件“C:\check.txt”正由另一进程使用,因此该进程无法访问该文件,请大家指点指点,帮我修正下。
模块一: private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked == true)
{
StreamWriter ws;
ws = File.CreateText( "C:\\check.txt ");
ws.WriteLine( "1 ");
ws.Close();
}
else
{
StreamWriter ws;
ws = File.CreateText( "C:\\check.txt ");
ws.WriteLine( "0 ");
ws.Close();
}
}
模块2: private void Form1_Load(object sender, EventArgs e)
{
if (File.Exists(@ "C:\check.txt ") == true)
{
StreamReader rs = new System.IO.StreamReader(@ "C:\check.txt ", System.Text.Encoding.UTF8);
string s = rs.ReadLine();
if (s.Trim() == "0 ")
{
textBox2.Text = " ";
textBox3.Text = " ";
}
else
{
checkBox1.Checked = true;
}
rs.close();
}
}
[解决办法]
模块一: Mutex m = new Mutex(false, "MyMutex ");
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
m.WaitOne();
if (checkBox1.Checked == true)
{
StreamWriter ws;
ws = File.CreateText( "C:\\check.txt ");
ws.WriteLine( "1 ");
ws.Close();
}
else
{
StreamWriter ws;
ws = File.CreateText( "C:\\check.txt ");
ws.WriteLine( "0 ");
ws.Close();
}
m.ReleaseMutex();
}
模块2: Mutex m = new Mutex(false, "MyMutex ");
private void Form1_Load(object sender, EventArgs e)
{
m.WaitOne();
if (File.Exists(@ "C:\check.txt ") == true)
{
StreamReader rs = new System.IO.StreamReader(@ "C:\check.txt ", System.Text.Encoding.UTF8);
string s = rs.ReadLine();
if (s.Trim() == "0 ")
{
textBox2.Text = " ";
textBox3.Text = " ";
}
else
{
checkBox1.Checked = true;
}
rs.close();
}
m.ReleaseMutex();
}
[解决办法]
问题在rs.Close之前又触发了CheckedChanged事件,在CheckedChanged事件中又会再次建立这个文件,所以会报错,下面是修改之后的代码
private void Form1_Load(object sender, EventArgs e)
{
if (File.Exists(@ "C:\check.txt ") == true)
{
StreamReader rs = new System.IO.StreamReader(@ "C:\check.txt ", System.Text.Encoding.UTF8);
string s = rs.ReadLine();
rs.close();
if (s.Trim() == "0 ")
{
textBox2.Text = " ";
textBox3.Text = " ";
}
else
{
checkBox1.Checked = true;
}
}
}