zoukankan      html  css  js  c++  java
  • c# 中文件操作 文件被锁住的问题

    这两个在调整以前写过的代码,把以前代码里面的一些小问题都改了一下,这其中有一个文件操作的BUG,我在这里讲一下。

    一般系统都会有自己的日志模块,来快速确定系统发生异常的位置,我这里的一个项目的日志系统是自己用System.IO.File这个类来写的,当Web上面同时发生两个请求时,日志模块会同时操作一个文件导致系统异常。以前的解决办法是把打日志的等级调高,来做到少打日志。今天在群里面专门找人问了一下,终于解决了这个问题。我们先看一下我以前是怎么写的吧。

            static object obj = new object();
            /// <summary>
            ///  创建一个TXT文件
             /// </summary>
            /// <param name="FILE_NAME">文件路径</param>
            /// <param name="str">内容</param>
            public static void WriteFile(string FILE_NAME, string str)
            {
                System.IO.StreamWriter sw = null;
                sw = System.IO.File.AppendText(FILE_NAME);
                sw.WriteLine(str);
                lock (obj)
                {
                    sw.Flush();
                    sw.Close();
                }
    
            }

    这里我们看到我妄想用文件锁的方式来解决这样的问题。但是没有什么效果,现在改为下面的方式,就完全没有了文件操作的问题。

             /// <summary>
            ///  创建一个TXT文件
             /// </summary>
            /// <param name="FILE_NAME">文件路径</param>
            /// <param name="str">内容</param>
            public static void WriteFile(string FILE_NAME, string str)
            {
                using (FileStream fs = new FileStream(FILE_NAME, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
                {
                    if (fs.CanWrite)
                    {
                        using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default))
                        {
                            sw.WriteLine(str);
                            sw.Flush();
                        }
                    }
                }
            }
    --------------------------------------------------------------------------------------------------------------------------------------------
    顺势而为
  • 相关阅读:
    Qt Create or VS 2015 使用 Opencv330 相机静态库链接错误如何解决?
    Qt create 如何构建 ActiveX 控件?
    VB 如何调用 c++ DLL?
    Opencv 330 如何裁剪图片中大的目标?
    Opencv 330 如何進行圖像的旋轉?
    Qt 开发 MS VC 控件终极篇
    Qt 5.9.4 如何静态编译和部署?
    图片理论基础
    iOS平台设置系统状态栏(通知栏、顶部状态栏)样式背景颜色或透明
    jQuery基础
  • 原文地址:https://www.cnblogs.com/zhuzhenyu/p/2718239.html
Copyright © 2011-2022 走看看