【问题标题】:Do reading a read-only file locks the file读取只读文件会锁定文件
【发布时间】:2015-05-01 01:44:47
【问题描述】:

我在生产服务器中有一个日志文件,它不断被程序更新(非常频繁。比如说每秒 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
********************************

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

【问题讨论】:

    标签: vb.net windows-server-2003


    【解决方案1】:

    您正在使用FileStream 构造函数的this overload。文档说

    构造函数被授予对文件的读/写访问权限,它是 打开共享 读取权限(即请求打开文件以供 由这个或另一个进程写入将失败,直到 FileStream 对象已关闭,但读取尝试会成功)。

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

    【讨论】:

    • 正确的是第四个参数 FileShare 是答案 - 但似乎 .Read 或 .ReadWrite 将允许其他人访问该文件。
    • @rheitzman OP 说生产服务器在流打开时无法写入日志文件。因此,您需要使用 Write 或 ReadWrite 打开(取决于服务器是否还从自己的日志文件中读取)。
    • 我认为问题是开发程序意外锁定文件导致服务器错误。您可能正确地认为两个程序都需要使用 FileShare() 属性,但我猜只是更改开发程序就可以了。
    猜你喜欢
    • 1970-01-01
    • 2018-04-19
    • 2014-11-06
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多