zoukankan      html  css  js  c++  java
  • 文件正由另一进程使用,因此该进程无法访问此文件

        public void WriteLog(string logStr)
        {
            lock (this)
            {
                string path = @"D:logpayment";
                string file = DateTime.Now.ToString("yyyy-MM-dd") + "paymentlog.ini";
                DirectoryInfo d = new DirectoryInfo(path);
                if (!d.Exists)
                {
                    Directory.CreateDirectory(path);
                }
                file = path + "\" + file;
                if (!File.Exists(file))
                {
                    File.CreateText(file);
                }
    
                StreamWriter sw = new StreamWriter(file, true);
                sw.WriteLine(DateTime.Now.ToShortTimeString() + logStr);
                sw.Flush();//防止缓存溢出    
                sw.Close();
            }
        }
    

      当文件不存在时,执行上面程序会抛出异常“System.IO.IOException: 文件“D:logpayment2014-09-18paymentlog.ini”正由另一进程使用,因此该进程无法访问此文件。

    原因:File.Create(file);这句代码会返回一个FileStream流与该文件链接,因此被占用。

    解决方法:将上面的代码改为File.Create(file).Close();   或者直接将返回的FileStream赋值给下面的StreamWriter对象sw。 修改后的代码为:

            public void WriteLog(string logStr)
            {
                lock (this)
                {
                    StreamWriter sw = null;
    
                    string path = @"D:logpayment";
                    string file = DateTime.Now.ToString("yyyy-MM-dd") + "paymentlog.ini";
                    DirectoryInfo d = new DirectoryInfo(path);
                    if (!d.Exists)
                    {
                        Directory.CreateDirectory(path);
                    }
                    file = path + "\" + file;
                    if (!File.Exists(file))
                    {
                        sw = File.CreateText(file);
                    }
                    else
                    {
                        sw = new StreamWriter(file, true);
                    }
                    sw.WriteLine(DateTime.Now.ToShortTimeString() + logStr);
                    sw.Flush();//防止缓存溢出    
                    sw.Close();
                }
            }
    

      

  • 相关阅读:
    [UE4]Spline
    [UE4]Spline Mesh Actor
    SpringBoot的jar包引用外部properties文件
    如何将.crt文件转换为.cer格式
    消息队列之 RabbitMQ
    The last packet successfully received from the server was 8 milliseconds ago.
    DEBUG、INFO、WARN、ERROR、CRITICAL开发日志级别定义
    灰度发布-流程篇
    k8s+istio:流量控制之灰度发布
    微服务、SpringCloud、k8s、Istio杂谈
  • 原文地址:https://www.cnblogs.com/buguge/p/3978850.html
Copyright © 2011-2022 走看看