首页 > 技术文章 > File.Create(path)未关闭遇到的一点点问题

ichenhao 2016-07-27 23:20 原文

      本人老菜鸟一枚,不是因为偶是菜鸟中的老手,而是偶是老了但是还是很菜的鸟╮(╯▽╰)╭,不过打今儿起偶想要腾飞……

      今天写文本文件编辑类时遇到一个小问题,下面先将问题描述一下:

      1、写文本文件时都会习惯性的判断一下文件是否存在,如果不存在就创建一个出来,也就是下面的代码

 if (!File.Exists(logPath))
 {
     File.Create(logPath);                  
 }

      看起来似乎没什么问题,但是很不凑巧的,问题就是来了,下面几种写文本的方式,在第一次建立文本文件的时候数据都写不进去。

 File.WriteAllText(logPath, msg);

File.WriteAllLines(logPath,msg);
 byte[] buffer = Encoding.Default.GetBytes(msg);
 FileStream myFileStream = new FileStream(logPath, FileMode.Append, FileAccess.Write);
 myFileStream.Write(buffer, 0, buffer.Length);
 myFileStream.Close();
 myFileStream.Dispose();

      经查阅,由此方法创建的 FileStream 对象的 FileShare 值默认为 None;直到关闭原始文件句柄后,其他进程或代码才能访问这个创建的文件。也就是说必须要关闭,要关闭,要关闭,下面就是问题的解决办法:(https://msdn.microsoft.com/zh-cn/library/d62kzs03(VS.80).aspx)

if (!File.Exists(logPath))
{
    File.Create(logPath).Close();                  
}

      其实,File.WriteAllText(),FileStream中好多写入文本的方法都默认新建文件,但是本老菜鸟还是觉得判断一下比较好,毕竟可以避免那些不会新建文件的方法报错。

      欢迎指正,共同进步。

 

推荐阅读