无法读取文件但可以在C#中复制它

时间:2012-09-25 13:40:57

标签: c# .net file

某个系统服务使用了一个日志文件。我希望我的程序读取该文件。

如果我使用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(),我可以将该文件复制到临时文件中并读取临时文件。

这有些奇怪。如果我可以复制文件,为什么我不能打开它进行阅读?

是否可以直接读取该文件而不先复制它?

2 个答案:

答案 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快照。