某个系统服务使用了一个日志文件。我希望我的程序读取该文件。
如果我使用System.IO.File.ReadAllText()
,我会收到System.IO.IOException
消息The process cannot access the file 'X' because it is being used by another process.
。然而,如果我调用System.IO.File.Copy()
,我可以将该文件复制到临时文件中并读取临时文件。
这有些奇怪。如果我可以复制文件,为什么我不能打开它进行阅读?
是否可以直接读取该文件而不先复制它?
答案 0 :(得分:2)
这取决于日志文件的创建方式,特别是FileShare参数。您可以将其设置为允许读,写或无。
FileStream s2 = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read);
http://msdn.microsoft.com/en-us/library/system.io.fileshare.aspx
答案 1 :(得分:0)
您收到的消息表示此日志文件是在没有“共享读取”标志的情况下创建/打开的。 实际上,只有当该文件的创建者或第一个“开启者”明确允许时,才允许打开已经打开的文件。
要阅读它,您可以像以前一样复制它,或者创建驱动器的VSS快照。