.net 进程无法访问该文件,因为在写入日志文件时,另一个进程正在访问该文件
虽然这是大家都知道的问题,但在实现了锁和其他请求之后,我得到了这个异常。但有时我还是会遇到例外,但我无法弄清楚到底发生了什么 我正在做的是,在我的应用程序中,我以这种方式将一些日志消息写入文本文件 WriteToFile(DateTime.Now+“Method1():Entered”,日志文件名) WriteToFile的定义如下:.net 进程无法访问该文件,因为在写入日志文件时,另一个进程正在访问该文件,.net,.net,虽然这是大家都知道的问题,但在实现了锁和其他请求之后,我得到了这个异常。但有时我还是会遇到例外,但我无法弄清楚到底发生了什么 我正在做的是,在我的应用程序中,我以这种方式将一些日志消息写入文本文件 WriteToFile(DateTime.Now+“Method1():Entered”,日志文件名) WriteToFile的定义如下: public void WriteToFile(string message,string fileName) { try { l
public void WriteToFile(string message,string fileName)
{
try
{
lock (filelock)
{
using (FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
{
// Create the writer for data.
using (BinaryWriter w = new BinaryWriter(fs))
{
// Write data to Test.data.
w.Write(System.Environment.NewLine);
w.Write(message);
w.Write(System.Environment.NewLine);
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
}
}
每当出现此异常时,它都会将异常抛出给调用方,在调用方中,我再次写入了文件。如下所示:
public void Method1()
{
try
{
WriteToFile(DateTime.Now + "Method1(): Entered", LOG_FILE_NAME);
}
catch(Exception ex)
{
WriteToFile(DateTime.Now + "Exception in Method1():"+ex.Message, LOG_FILE_NAME);
}
}
但是现在在Method1()中,捕获的这个异常能够写入文件
所以,我在这里寻求任何人的帮助。这里还有其他更好的日志记录方式吗
谢谢,再见
Padma如果这是您的“真实世界”问题(日志记录),您应该使用经过良好测试、工作正常且可扩展的解决方案进行登录->或。否则,请添加有关您尝试实现的目标的更多/所有详细信息。即“我的功能在文件I/O操作中比锁定和解锁提供更好的生产效率和性能” 这意味着您可以使用。我个人会创建一个streamwriter对象:
public void WriteToFile(string message, string fileName)
{
System.IO.StreamWriter fstream;
fstream = new System.IO.StreamWriter(fileName,true);
// stream writer adds newline to the end for you
fstream.WriteLine(message);
// flush to send all buffered data to the file
fstream.Flush();
// close the file, free resources
fstream.Close();
}
此外,我认为您需要在写入文件后解锁该文件,否则它可能会保持锁定状态。第三,您锁定日志文件的具体原因是什么?比如,您是否同时从多个进程向其写入?如果没有,那么我不明白您为什么需要首先锁定它。您要找的是这样的东西吗?:)
你能展示一下
filelock
的定义吗?
public void WriteToFile(string message,string fileName)
{
try
{
StreamWriter w = File.AppendText(filename)
w.WriteLine(message);
w.Close();
}
catch (Exception ex)
{
throw ex;
}
}