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

.net 绕过Windows中的文件访问保护以只读方式查看活动日志文件,.net,winapi,log4net,.net,Winapi,Log4net,一位客户要求为ASP.NET应用程序提供快速而脏的日志查看器,我正在使用log4net,我想我们可以简单地添加一个控制器来读取活动文件的尾部并将其吐回 如果我使用标准的.NET API(File.OpenText等),我会遇到访问冲突(文件被另一个进程打开),这是我所期望的,但我知道可以读取该文件,因为Ultraedit以只读方式打开它。我可以从.NETAPI中执行同样的操作吗 using(StreamReader infile = System.IO.File.OpenTex

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

如果我使用标准的.NET API(File.OpenText等),我会遇到访问冲突(文件被另一个进程打开),这是我所期望的,但我知道可以读取该文件,因为Ultraedit以只读方式打开它。我可以从.NETAPI中执行同样的操作吗

using(StreamReader infile =
         System.IO.File.OpenText(Request.PhysicalApplicationPath + @"\log\my.log"))
{
}
您是否尝试过:

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

指定允许对文件进行读/写共享,并在流上放置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没有对该文件设置独占锁。

但是您希望打开log4net创建的文件。由于ultraedit可以读取该文件,因此该文件不受log4net的独占锁定,并且您应该能够通过.Net指定FileShare参数来访问该文件。也可能是您的asp.net进程没有对实际文件的访问权限。这很有效,而使用基本的OpenRead或OpenText则没有!“既然ultraedit可以读取它,那么文件就不会被独占锁定”-是的,我也知道很多,但我假设OpenRead和OpenText会使用类似的访问模式,但显然它们不会。可能是