2009-07-21 28 views
1

代价如何确保日志目录存在于应用程序中的每个日志消息之前,该日志消息可能会每秒记录几次(但不会持续)?C#Directory.Exists

我可以实现一个文件系统观察样式的线程火起来,并重新创建一个丢失的日志目录,但我的直觉是,这将是一个稍重的操作

+1

如果您使用FileStream对象创建日志文件,那么名为OpenOrCreate的FileMode参数有一个选项,该参数在不存在的情况下创建完整的文件路径。 FileSystemWatcher根本不重,它的目的就是尽可能精简操作。如果我没有记错的话,在NTFS分区中几乎没有成本,因为NTFS本身支持文件和目录级别的事件绑定。 这就是说,我不知道这是必要的这种情况。 – MyItchyChin 2009-07-21 00:25:06

回答

4

我会检查,看它是否存在于第一次,比如你的记录器的构建,如果不是那么创建它的话。

Windows无法轻松删除正在使用的目录。

+0

由于我的StreamWriter是在使用中处理的,因此该目录不一定会被使用,因此将在每个日志 – johnc 2009-07-21 00:18:17

+3

之后进行处理,除此之外,如果您在目录中维护文件锁定,则无法删除它,直到持有该锁定的进程终止。 – MyItchyChin 2009-07-21 00:19:43

+0

+1我同意,只检查一次,然后锁定日志文件,以便不能删除目录。 – 2009-07-21 00:24:48

1

可能不那么贵。如果你只是在失败的写入中处理异常,那么你只会在第一次通过时(或者在删除目录后)得到异常,然后其他所有内容都会直接通过。这可能比不断检查更好。

+0

一点都不坏 – johnc 2009-07-21 00:18:50

+0

这种类型让我觉得Java应该有如下语法:try {stuff} catch(Exception e){catch code} andRetryOnce。否则,这种类型的代码最终会出现一些奇怪的异常代码和一个无法轻松隔离到库中的循环。 – 2009-07-21 00:21:02

+0

基本上都是这么想的 – johnc 2009-07-21 00:38:31