【问题标题】:How to read log from log file as it happens [closed]如何在发生时从日志文件中读取日志[关闭]
【发布时间】:2013-06-19 20:55:20
【问题描述】:

根据以下帖子中发布的解决方案,我创建了表单来读取日志文件

BackgroundWorker & Timer, reading only new lines of a log file?

但是,我在写日志条目时收到file in use 异常。

帮助

【问题讨论】:

  • "help" - 这是你的问题吗?您能否表明您了解问题,您知道关于打开、锁定、读取和写入文件的工作原理一些,您已将问题精确定位到可重现的测试用例,或者您只是想要该死的代码修复了吗?
  • 你的意思是“阅读时”日志条目吗?
  • @Nitin 您需要正确处理 streamReader 或 fileStream。

标签: c#


【解决方案1】:

当我进行此类文件访问/操作时,我通常会处理两件事。

首先,为了阅读,我使用以下代码(参见FileShare enumeration):

using (Stream s = File.Open(path, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite)) { ... }

其次,我通常会写一个while循环来打开文件进行读/写这样的(草稿代码):

int tries=0;
while (tries < 10) {
    try {
        // try to open file for your operation
        break;
    } catch (IOException) {
        tries++;
        Thread.Sleep(200);
    }
}

编辑:不小心我在回答中第一次使用了 FileShare.Read,而不是更合适的 FileShare.ReadWrite。现在我已经更正了。

【讨论】:

  • 实际上可以同时写入和读取文件。正如tail 所展示的那样,用于在写入日志时查看日志,这似乎是 OP 试图复制的内容。
  • 我只是想给出一些一般性的想法。
【解决方案2】:

您需要确保您的日志读取代码以ReadWrite 模式打开文件。有关完整解释,请参阅其他帖子的出色答案:How do I open an already opened file with a .net StreamReader?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多