日期:2014-05-18  浏览次数:20717 次

操作文件遇到的郁闷问题,请大虾帮看看!!
if(!File.Exists(fileLogPath+fileLogName))
{
File.Create(fileLogPath+fileLogName);
}
try
{
StreamWriter   strwriter   =   File.AppendText(fileLogPath+fileLogName);
try
{
strwriter.WriteLine( "时间: "+DateTime.Now.ToString());
strwriter.WriteLine( "错误内容: "+Message);
//添加间隔符
strwriter.WriteLine( "--------------------------------------------- ");
strwriter.WriteLine();
strwriter.Flush();
}
catch(Exception   e)
{
throw   new   Exception( "日志文件写入失败信息: "+e.ToString());        
}
finally
{
strwriter.Close();
strwriter=null;
//GC.Collect();
}
}
catch(Exception   ex)
{
throw   new   Exception( "日志文件没有打开,详细信息如下: "+ex.ToString());
}
为什么执行到 StreamWriter   strwriter   =   File.AppendText(fileLogPath+fileLogName);这句就报“该文件正由另一进程使用”,就第一次运行时报这个错,第二次再次运行就好了。

------解决方案--------------------
MSDN:::

File.Create();//由此方法创建的 FileStream 对象的 FileShare 值默认为 None;直到关闭原始文件句柄后,其他进程或代码才能访问这个创建的文件。

此方法等效于使用默认缓冲区大小的 Create(String,Int32) 方法重载。

允许 path 参数指定相对或绝对路径信息。相对路径信息被解释为相对于当前工作目录。若要获取当前工作目录,请参见 GetCurrentDirectory。

如果指定的文件不存在,则创建该文件;如果存在并且不是只读的,则将改写其内容。

默认情况下,将向所有用户授予对新文件的完全读/写访问权限。文件是用读/写访问权限打开的,必须关闭后才能由其他应用程序打开。


using System;
using System.IO;
public class TextToFile
{
private const string FILE_NAME = "MyFile.txt ";
public static void Main(String[] args)
{
if (File.Exists(FILE_NAME))
{
Console.WriteLine( "{0} already exists. ", FILE_NAME);
return;
}
using (StreamWriter sw = File.CreateText(FILE_NAME))
{
sw.WriteLine ( "This is my file. ");
sw.WriteLine ( "I can write ints {0} or floats {1}, and so on. ",
1, 4.2);
sw.Close();
}
}
}

------解决方案--------------------
去掉if(!File.Exists(fileLogPath+fileLogName))
{
File.Create(fileLogPath+fileLogName);
}这段代码!因为StreamWriter strwriter = File.AppendText(fileLogPath+fileLogName);到了这里会自动创建你要的那个日志文件。