Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 读取只读文件是否会锁定该文件_Vb.net_Windows Server 2003 - Fatal编程技术网

Vb.net 读取只读文件是否会锁定该文件

Vb.net 读取只读文件是否会锁定该文件,vb.net,windows-server-2003,Vb.net,Windows Server 2003,我在生产服务器中有一个日志文件,它不断地被程序更新(非常频繁,比如每秒5到10次) 此日志文件对于Dev服务器显然是只读的,并且文件大小可能会增加到~4MB 我在Dev环境中有一个程序。它定期读取文件内容并查找特定的行/关键字 ************************ If File.Exists(targetFile) Then Using fs As FileStream = New FileStream(targetFile, Fil

我在生产服务器中有一个日志文件,它不断地被程序更新(非常频繁,比如每秒5到10次)

此日志文件对于Dev服务器显然是只读的,并且文件大小可能会增加到~4MB

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

************************
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无法访问文件并抛出错误

您正在使用
FileStream
构造函数。文件上说

构造函数被授予对文件的读/写访问权限,并且 已打开共享读取访问(即,请求打开文件以进行访问) 此进程或其他进程的写入将失败,直到文件流 对象已关闭,但读取尝试将成功)

如果要允许其他进程读取和写入文件,则必须在
FileShare.ReadWrite
模式下打开,使用您正在使用的
FileStream
构造函数。文件上说

构造函数被授予对文件的读/写访问权限,并且 已打开共享读取访问(即,请求打开文件以进行访问) 此进程或其他进程的写入将失败,直到文件流 对象已关闭,但读取尝试将成功)


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

更正,第四个参数FileShare是答案-但似乎.Read或.ReadWrite会允许其他人访问该文件。@rheitzman the OP说,当流打开时,生产服务器无法写入日志文件。因此,您需要使用Write或ReadWrite打开(取决于服务器是否也从其自己的日志文件中读取)。我认为问题在于dev程序意外地锁定了文件,导致了服务器错误。您可能会更正这两个程序都需要使用FileShare()属性,但我的猜测是,只要更改开发程序就可以了。正确的是,第四个参数FileShare就是答案-但似乎.Read或.ReadWrite允许其他人访问该文件。@rheitzman the OP说,在流打开时,生产服务器无法写入日志文件。因此,您需要使用Write或ReadWrite打开(取决于服务器是否也从其自己的日志文件中读取)。我认为问题在于dev程序意外地锁定了文件,导致了服务器错误。您可能会更正这两个程序都需要使用FileShare()属性,但我猜只要更改dev程序就可以了。