我写了一个外部程序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流没有关闭,那么其它的流就没有资格打开该文本文件进行写的权限,就报错,可是这样的话我如果手工点击该文本还是可以打开,还是可以写内容并保存,但不会报错,为什么阿?高手赐教

解决方案 »

  1.   

    你需要多个进程访问(写)一个文件,必然会有冲突,建议使用循环sleep,try的方法,或者应该写一个windows服务,由该服务负责统一写log
      

  2.   

    我想知道filestream实例化的  FileStream fs1 = new FileStream(@"c:\Mylog.txt", FileMode.Open, FileAccess.ReadWrite);
    是对文件独占吗?如果独占了
    怎么我以后还可以手工打开文本并进行读写操作
    而程序却不能呢?有什么方法让程序也能象手工打开那样不报错