好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

正由另一进程使用,因此该进程无法访问该文件

正由另一进程使用,因此该进程无法访问该文件

/// <summary>
        /// 写入日志
        /// </summary>
        /// <param name="log"></param>
        private void WriteLog(string log)
        {
            //edit at 2012.10.17 改成无锁异步写如日志文件
            using (FileStream fs = new FileStream(DataLogFile, FileMode.Append, FileAccess.Write, FileShare.Write, 1024, FileOptions.Asynchronous))
            {
                byte[] buffer = System.Text.Encoding.UTF8.GetBytes(log+"\r\n");
                IAsyncResult writeResult = fs.BeginWrite(buffer, 0, buffer.Length,
                    (asyncResult) =>
                    {
                        FileStream fStream = (FileStream)asyncResult.AsyncState;
                        fStream.EndWrite(asyncResult);
                    },
                    fs);
                //fs.EndWrite(writeResult);//这种方法异步起不到效果
                fs.Close();
            }
 
            //lock (lockObj)
            //{
 
            //    //using (StreamWriter sw = File.AppendText(DataLogFile))
            //    //{
 
            //    //    sw.WriteLine(log);
            //    //    sw.Flush();
            //    //    sw.Close();
            //    //}
            //}
        } class   Program

{

     static   void   Main( string [] args)

     {

         ThreadPool.QueueUserWorkItem(run);

         ThreadPool.QueueUserWorkItem(run);

         Console.ReadLine();

     }

     private   static   void   run( object   state)

     {

         while   ( true )

         {

             Append();

         }

     }

     public   static   void   Append()

     {

         try

         {

             //lock (typeof(Program))

             //{

                 using   (var writer = File.AppendText( "1.txt" ))

                 {

                     writer.Write(DateTime.Now.ToString( "HHmmss" ));

                 }

                 Console.WriteLine( "Done" );

             //}

         }

         catch   (Exception ex)

         {

             Console.WriteLine(ex);

         }           

     }

}
         static  System.Threading.Semaphore _mutex =  new  System.Threading.Semaphore( 1 ,  1 ,  " IOHelper.Save " );
         private   static   bool  Save( string  fileName,  string  text,  bool  isAppend)
        {
             try
            {
                 if  (_mutex.WaitOne( 2000 ,  false )) // 进程间同步。
                {
                     using  (StreamWriter writer =  new  StreamWriter(fileName, isAppend))
                    {
                        writer.Write(text);
                    }
                }
                 return   true ;
            }
             catch  (Exception err)
            {
                Log.WriteLogToTxt(err);
            }
             finally
            {
                 try
                {
                    _mutex.Release();
                }
                 catch
                {

                }
            }
             return   false ;
        }

 

 

http://www.cnblogs.com/cyq1162/archive/2013/03/29/2988035.html

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于正由另一进程使用,因此该进程无法访问该文件的详细内容...

  阅读:34次