2015-05-01 58 views
0

我在生产服务器中有一个日志文件,它不断被程序更新(非常频繁地说,例如每秒5到10次)。是否读取只读文件锁定文件

这个日志文件显然是只读的开发服务器,并有可能文件大小增加到~4MB。

我在开发环境中有一个程序。定期读取文件内容并查找特定的行/关键字。

************************ 
If File.Exists(targetFile) Then 
      Using fs As FileStream = New FileStream(targetFile,    FileMode.Open, FileAccess.Read) 
       Using sr As StreamReader = New StreamReader(fs) 
        Dim all As String = sr.ReadToEnd() 
        allLines = all.Split(Environment.NewLine) 
       End Using 
      End Using 
End If 
******************************** 

我的问题是,它看起来像从dev服务器读取锁定文件[不确定]。所以该服务是PRD无法访问该文件并抛出错误。

回答

4

您正在使用FileStream构造函数的this overload。该文件说,被赋予

构造函数读取文件/写访问,并打开 共享读访问(即请求通过这个来打开 书面文件或其他进程将失败直到FileStream 对象已关闭,但读取尝试将成功)。

如果你想允许其他进程读取和写入文件,必须在FileShare.ReadWrite模式下打开,使用this overload

+0

正确的是,第四个参数FileShare是答案 - 但看起来.Read或.ReadWrite会允许其他人访问该文件。 – rheitzman

+0

@rheitzman OP说生产服务器在流打开时不能写入日志文件。因此,您需要使用Write或ReadWrite打开(取决于服务器是否也从自己的日志文件中读取)。 –

+0

我认为问题是开发程序意外地锁定文件导致服务器错误。你可能是正确的,两个程序都需要使用FileShare()属性,但我的猜测是只是改变开发计划将做的伎俩。 – rheitzman