【发布时间】:2012-09-03 17:43:23
【问题描述】:
我想使用 C#/.NET 在 Windows 7 主机上打开文件以进行追加。为此,我想使用通常的文件输出操作。我找到了这样的解决方案:
FileStream trace_fd = new FileStream(r"c:\temp\testlog.txt",
FileMode.Append,
FileAccess.Write,
FileShare.ReadWrite)
即使上面一行的程序已启动并正在运行,我的跟踪文件也是可读的。从这样的正确代码中,我不再有文件被另一个进程使用的异常:
FileStream good_logreader_fd = new FileStream("c:\temp\testlog.txt",
FileMode.Read,
FileAccess.Read,
FileShare.ReadWrite)
然后我有另一个程序(错误的日志扫描器)有这样的行:
FileStream bad_logreader_fd = new FileStream("c:\temp\testlog.txt",
FileMode.Read,
FileAccess.Read,
FileShare.None)
这样的行显然是日志扫描器的一个错误。如果我的程序没有运行,那么有缺陷的 logscaner 将获得排他锁,并且我的程序的后续运行将无法获取跟踪文件的 fd。
我的问题是我能做些什么来防止这种可怕的情况发生。 例如。我可以为跟踪文件设置文件权限以防止任何人获得排他锁吗?如果是,那怎么办?还有什么可以保护我的程序免受错误日志扫描程序问题的影响吗?请注意,我必须在程序运行之间保持相同的跟踪文件名。
【问题讨论】:
标签: c# .net file-locking