C# 在运行中的应用程序不需要关闭文件时,如何写入日志文件?

C# 在运行中的应用程序不需要关闭文件时,如何写入日志文件?,c#,file,logging,C#,File,Logging,我们在C#中有静态类Logger,其中日志文件在应用程序启动时初始化。日志文件在每个512字节后回滚(创建新的日志文件)。现在的问题是,我无法从外部打开当前日志文件,因为它已经在我的应用程序中打开了 我不明白如何处理这个问题。如何打开当前打开的日志文件,同时不应损害当前对文件的操作 谢谢。使用FileShare.ReadWrite在您的情况下至关重要。这应该是你的诀窍: using (FileStream stream = File.Open("filePath", FileMode.Open,

我们在C#中有静态类
Logger
,其中日志文件在应用程序启动时初始化。日志文件在每个512字节后回滚(创建新的日志文件)。现在的问题是,我无法从外部打开当前日志文件,因为它已经在我的应用程序中打开了

我不明白如何处理这个问题。如何打开当前打开的日志文件,同时不应损害当前对文件的操作


谢谢。

使用
FileShare.ReadWrite
在您的情况下至关重要。这应该是你的诀窍:

using (FileStream stream = File.Open("filePath", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    using (StreamReader reader = new StreamReader(stream))
    {
        while (!reader.EndOfStream)
        {
            // do your stuff here
        }
    }
}

为了给你一个准确的答案,我需要看看你的记录器的代码。但我会解释这个想法。假设记录器正在使用
System.IO.File.Open()
方法创建/打开日志文件进行写入。使用
Open()
方法的重载,该方法允许您指定
FileShare
参数()并指定该参数的
FileShare.Read
。这将允许应用程序以只读模式打开日志文件,因此不会影响日志记录操作。

您可以使用记事本打开当前日志文件吗?@ShaneLu是,但可能无法保证使用当前内容打开。并且它可能会伤害其他操作员,如写入日志文件。@pranitkothari如果使用正确的设置(即
FileShare.Read
),则不会伤害写入日志文件。请参阅我的答案贝娄。另一方面,考虑使用一个库,比如+1——注意在两个程序中都需要正确的<代码>文件SeaSys<代码>(可能是“代码>读取/代码>一边,<代码>读写< /代码>另一个)。- 1,这可能是意外的重写日志文件的潜在危险。OP明确表示他不想损害日志操作。@据我所知,RacilHilan不想阻止应用程序写入文件,也不想保护文件内容不受外部应用程序编辑。在任何情况下,他都必须为我们澄清这一点。@pranitkothari,你在哪里说过“我想使用外部应用程序写入日志文件”?@pranitkothari无论如何,你可以像George建议的那样使用
FileShare.ReadWrite
。但是,请记住,这意味着如果它们同时发生,你们中的一方将覆盖另一方,并且没有办法避免。你重复说你不想“伤害手术”,所以我不确定你的意思。