2

我有一个TraceListener对象,用于记录,在 app.config 中创建,指向 USB 记忆棒上的一个位置。

我收到一条IOException消息

文件的卷已被外部更改,因此打开的文件不再有效。

Trace.WriteLine()在我移除设备然后将其重新插入后尝试时。我知道它正在发生,因为当我拔下它时,跟踪侦听器所拥有的打开文件的句柄无效。

我已经设法IOException通过调用Close()TraceListener 来阻止 s,但我无法弄清楚如何再次重新打开同一个文件的句柄。方法的 MSDN 文档TextWriterTraceListener.Close()

在调用 Close 后调用 Write 或 WriteLine 方法会自动重新打开流。

但它只是没有这样做。关闭流后,我没有得到进一步的输出。

编辑:

更多信息

我发现跟踪侦听器只有在我调用 后Close()尝试在拔下驱动器时写入时才无法再次写入。如果我在拔下驱动器时不写,然后再次插入驱动器并尝试写,一切正常。我还验证了我的Trace.Listeners收藏仍然包含我的听众。

4

1 回答 1

1

经过大量研究后,我发现Trace.Refresh()似乎解决了这个问题,但是,通过阅读 rene 的原始问题评论,这种方法将重新初始化整个 Trace 框架。对于我想要的东西来说似乎有点沉重,但也许这个答案会对其他人有所帮助。

Trace.Refresh()在 MSDN 上

来自 MSDN 的评论:

启动应用程序时会捕获跟踪配置数据。如果应用启动后配置数据发生变化,调用 Refresh 方法更新跟踪配置数据。

于 2014-03-24T17:16:18.520 回答