我写了一个外部程序test1.exe(命令行方式),该程序主要是打开一个文本,并往里面插入一行内容。
代码如下:
class mythread
{
public int _order = 0;
public int sleeptime = 5; public void Write()
{
FileStream fs1 = new FileStream(@"c:\Mylog.txt", FileMode.Open, FileAccess.ReadWrite);
try
{
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine("THE Proceed is {0} startDATETIME:{1}", _order,DateTime.Now.ToString()); Thread.Sleep(sleeptime * 1000); //程序暂停一段时间
sw.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
fs1.Close();
}
}
}
然后我又写了一个程序test2.exe通过一个循环多次调用test1.exe这个程序:
代码大致如下:
for (int i = 0; i < 4; i++)
{
try
{
Process P = new Process();
P.StartInfo.FileName = "test1.exe";
P.Start();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}但是第一个test1.exe出现没问题,第二个,三个。。后就报错,说该文本文件已经被其它的进程所使用请问是什么原因阿,我分析了一下,因为我的第一个程序打开该文本后,有段等待时间,则该fs1流没有关闭,那么其它的流就没有资格打开该文本文件进行写的权限,就报错,可是这样的话我如果手工点击该文本还是可以打开,还是可以写内容并保存,但不会报错,为什么阿?高手赐教
代码如下:
class mythread
{
public int _order = 0;
public int sleeptime = 5; public void Write()
{
FileStream fs1 = new FileStream(@"c:\Mylog.txt", FileMode.Open, FileAccess.ReadWrite);
try
{
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine("THE Proceed is {0} startDATETIME:{1}", _order,DateTime.Now.ToString()); Thread.Sleep(sleeptime * 1000); //程序暂停一段时间
sw.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
fs1.Close();
}
}
}
然后我又写了一个程序test2.exe通过一个循环多次调用test1.exe这个程序:
代码大致如下:
for (int i = 0; i < 4; i++)
{
try
{
Process P = new Process();
P.StartInfo.FileName = "test1.exe";
P.Start();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}但是第一个test1.exe出现没问题,第二个,三个。。后就报错,说该文本文件已经被其它的进程所使用请问是什么原因阿,我分析了一下,因为我的第一个程序打开该文本后,有段等待时间,则该fs1流没有关闭,那么其它的流就没有资格打开该文本文件进行写的权限,就报错,可是这样的话我如果手工点击该文本还是可以打开,还是可以写内容并保存,但不会报错,为什么阿?高手赐教
是对文件独占吗?如果独占了
怎么我以后还可以手工打开文本并进行读写操作
而程序却不能呢?有什么方法让程序也能象手工打开那样不报错