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

    public void WriteLog(string logStr)
    {
        lock (this)
        {
            string path = @"D:\log\payment\";
            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:\log\payment\2014-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:\log\payment\";
                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();
            }
        }

  

时间: 2024-08-30 07:11:10

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

[译] Ruby如何访问Excel文件

Parsing Excel Files with Ruby BY: MATT NEDRICH   翻译:佣工7001 本文中,我将会评判几种Ruby语言访问Excel文件的库.我将要讨论针对不同格式的Excel文件访问的现有的几个Ruby库.本文中更多地聚焦于读取Excel文件,但是也对与更改/写入Excel文件稍作了些讨论. 如果你迫不及待地想要查看代码,请移步我提交与Github上的 一个项目 ,项目中有一些读取Excel文件的代码片段,都是本文所提到的. Excel文件类型 Before

巧用FileShare解决C#读写文件时文件正由另一进程使用的bug

在使用C#进行文件读写的时候,一旦对文件操作频繁,总会碰到一些令人措手不及的意外.例如经常会碰到的一个问题: System.IO.IOException: 文件“XXX”正由另一进程使用,因此该进程无法访问此文件.这个问题是碰到最频繁的一个.其实可 以通过FileShare来完美解决这个问题,下面提供一个例子: /*filePath为传过来的文件路径,endcode为设置的文件编码方式*/ using (FileStream fs = new FileStream(filePath, FileM

[转]]c# 读写文件时文件正由另一进程使用

c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件,在IO处理上遇到了无法操作的问题. 文件“D:\log.txt”正由另一进程使用,因此该进程无法访问该文件. log.txt是一个日志文件,不定时都可能由另外的程序对它进行日志记录写入操作. 今需要对日志文件读取出来,显示在日志查询里,需要用到了IO流. 1. FileStream fs = File.OpenRead(url);StreamReader sr = new StreamReader((System.IO.Stream

【转】“正由另一进程使用,因此该进程无法访问该文件”的问题&解决方法

正在写一个手指画图的程序C# + WPF其中有一部分是加载外部某PNG文件,放入BitmapImage,再作为Image的Source显示在Canvas上画了几笔之后,再存回这个PNG文件================问题=================BitmapImage这个对象没有Dispose方法,始终无法释放,因此在之后FileStream试图写这个文件时出现"正由另一进程使用,因此该进程无法访问该文件"的问题BitmapImage bitmap = new Bitmap

c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件

log20170317.txt是一个自动任务生成log4net的日志文件,自动任务一直在执行. 今需要对日志文件读取出来,显示在日志查询里,需要用到了IO流. 1. FileStream fs = File.OpenRead(url); StreamReader sr = new StreamReader((System.IO.Stream)fs, System.Text.Encoding.Default); 错误提示:文件“D:\Log\log20170317.txt”正由另一进程使用,因此该

FileStram文件正由另一进程使用,该进程无法访问该文件,解决方法

异常提示: “文件正由另一进程使用,该进程无法访问该文件”. 打开一个文件后,尝试重新打开一次该文件,或者打开该文件后想对该文件进行其他操作的时候,就容易出现这个错误提示. 通常造成该错误的原因是构造System.IO.FileStream时参数设置有问题. 一般习惯直接使用: FileStream fs = new FileStream(fileName, FileMode.Open) 这个方法打开文件的时候是以只读共享的方式打开的,但若此文件已被一个拥有写权限的进程打开的话,就无法读取了,

关于文件保存/关闭时报错:文件正由另一进程使用,因此该进程无法访问此文件。

起因:最近给Unity上的游戏写关于存档的脚本,使用了xml.然后发现每次文件保存时,也就是调用XmlDocument.Save()对象方法的时候就会报错说该文件路径分享异常啥的我也不记得了.然后搞了半天,无果.猜测原因可能是因为文件被占用的原因,遂简化代码在新的解决方案里重现异常. 如图: 运行报错,第33行,"文件正由另一进程使用,因此该进程无法访问此文件." 网上找答案,这个异常网上也有答案,虽然他们的代码不是xml相关的但是错误原理相同. 错误原因是:文件正在被流调用.要想保存

文件正由另一进程使用,该进程无法访问该文件,解决方法

异常提示: “文件正由另一进程使用,该进程无法访问该文件”. 打开一个文件后,尝试重新打开一次该文件,或者打开该文件后想对该文件进行其他操作的时候,就容易出现这个错误提示. 通常造成该错误的原因是构造System.IO.FileStream时参数设置有问题. 一般习惯直接使用: FileStream fs = new FileStream(fileName, FileMode.Open) 这个方法打开文件的时候是以只读共享的方式打开的,但若此文件已被一个拥有写权限的进程打开的话,就无法读取了,

Linux文件编辑器vim输出输入重定向、管道以及进程

合抱之木,生于毫末:九层之台,起于累土:千里之行,始于足下.正因基础的重要性,才又撸起了linux. linux编辑工具: VI VIM EMACS vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面.vim的这些优势主要体现在以下几个方面: 易用性 vi只能运行于unix中,而vim不仅可以运行于unix,windows ,mac等多操作平台. 语法加亮 vim可以用不同的颜色来加亮你的代码. 可视化操作(ESC+V) 就是说vim不仅可以在终端运行,也可以运行于x