.net 进程无法访问该文件,因为在写入日志文件时,另一个进程正在访问该文件

.net 进程无法访问该文件,因为在写入日志文件时,另一个进程正在访问该文件,.net,.net,虽然这是大家都知道的问题,但在实现了锁和其他请求之后,我得到了这个异常。但有时我还是会遇到例外,但我无法弄清楚到底发生了什么 我正在做的是,在我的应用程序中,我以这种方式将一些日志消息写入文本文件 WriteToFile(DateTime.Now+“Method1():Entered”,日志文件名) WriteToFile的定义如下: public void WriteToFile(string message,string fileName) { try { l

虽然这是大家都知道的问题,但在实现了锁和其他请求之后,我得到了这个异常。但有时我还是会遇到例外,但我无法弄清楚到底发生了什么

我正在做的是,在我的应用程序中,我以这种方式将一些日志消息写入文本文件

WriteToFile(DateTime.Now+“Method1():Entered”,日志文件名)

WriteToFile的定义如下:

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;
    }
}