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

cod*_*eim 1 .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"))
{
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 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
    }
}
Run Code Online (Sandbox Code Playgroud)

由于您可以使用UltraEdit打开文件,因此我假设log4net没有对文件进行独占锁定.