在Windows中绕过文件访问保护以只读方式查看活动日志文件

时间:2010-11-30 20:15:21

标签: .net winapi log4net

客户要求为ASP.NET应用程序提供快速而脏的日志查看器,我正在使用log4net,我想我们可以简单地添加一个控制器来读取活动文件的尾部并将其吐回。

如果我使用标准.NET API(File.OpenText等),我会得到访问冲突(文件由另一个进程打开),这是我所期望的,但我知道可以读取该文件,因为Ultraedit打开它用于查看只读。我可以从.NET API中做同样的事情吗?

using(StreamReader infile =
         System.IO.File.OpenText(Request.PhysicalApplicationPath + @"\log\my.log"))
{
}

2 个答案:

答案 0 :(得分:5)

指定您允许对文件进行读/写共享,并在流上放置StreamReader以获得与File.OpenText相同的行为。

using( Stream stream = File.Open(@"x:\path\file.log", 
        FileMode.Open, FileAccess.Read, FileShare.ReadWrite) )
{
    using(StreamReader sr = new StreamReader(stream))
    {
        //read content
    }
}

由于你可以用UltraEdit打开文件,我认为log4net没有对文件进行独占锁定。

答案 1 :(得分:-2)

你有没有尝试过:

        using (FileStream fs = File.OpenRead("C:\\1.txt"))
        {
            //read here
        }