.NET-TextWriterTraceListener,另一个进程正在使用的文件

问题描述

|| 我正在创建这样的跟踪侦听器:
// Setup log tracing.

Trace.Listeners.Add(new TextWriterTraceListener(MyLogPath));
Trace.AutoFlush = true;
Trace.WriteLine(DateTime.Now.ToString() + \"-\" + \" Program started\");
当我检测到文件太大时,我想截断它(或者,仅取最后N行)。为了做到这一点,我想读入文件,但是我对跟踪监听器所做的事情似乎没有任何限制,即试图删除跟踪监听器并像这样处理其流:
// Clear logging.

Trace.Listeners[0].Close();
Trace.Listeners[0].Dispose();                     
Trace.Listeners.Clear();
,然后像这样阅读:
// Read in existing log.

string[] lines = File.ReadAllLines(MyLogPath);
,给了我IO异常(文件正在被另一个进程使用)。 有什么想法吗?     

解决方法

那么,一旦TraceWriter打开该文件,便无法重新打开该文件的原因是因为它以“读取”共享模式(每个进程监视器)打开了该文件。共享模式意味着您无法使用写访问权重新打开它(创建新句柄)。 但是,关闭TraceListener确实会关闭基础流。问题可能是您关闭了错误的侦听器。 不要忘记,除非明确将其删除,否则始终在进程启动时创建一个DefaultTraceListener。 因此,您的代码的正确版本应为:
Trace.Listeners[1].Close();
Trace.Listeners[1].Dispose();
Trace.Listeners.Clear();
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...