c# – 当文件变得可访问时是否可以引发事件?

c# – 当文件变得可访问时是否可以引发事件?,第1张

概述在C#中,我可以使用FileSystemWatcher对象来监视特定文件,并在创建,修改等事件引发事件. 我在这个类中遇到的问题是它会在文件创建的那一刻引发事件,即使创建文件的进程仍处于编写过程中.我发现这是非常有问题的,特别是如果我试图读取类似XML文档的东西,其中文件必须具有一些结构,在完成编写之前不会存在. .NET(最好是2.0)是否有任何方法可以在文件可访问后引发事件,或者我是否必须不 在C#中,我可以使用fileSystemWatcher对象来监视特定文件,并在创建,修改等事件时引发事件.

我在这个类中遇到的问题是它会在文件创建的那一刻引发事件,即使创建文件的进程仍处于编写过程中.我发现这是非常有问题的,特别是如果我试图读取类似XML文档的东西,其中文件必须具有一些结构,在完成编写之前不会存在.

.NET(最好是2.0)是否有任何方法可以在文件可访问后引发事件,或者我是否必须不断尝试读取该文件,直到它没有抛出异常才知道它可用?

解决方法 您可以使用文件系统观察程序检查文件何时更改.只有在文件先前关闭文件的程序之后,它才会变为“已更改”.我知道你要求C#,但我的VB.Net要好得多.希望你或其他人可以翻译.

它尝试打开文件,如果它不可用,它会添加一个观察程序,并等待文件被更改.文件更改后,它会再次尝试打开.如果等待超过120秒,它会抛出异常,因为您可能会遇到永远不会释放文件的情况.此外,我决定添加等待文件更改5秒的超时,以防在创建实际文件观察程序之前文件被关闭的可能性很小.

Public Sub Writetofile(ByVal filePath As String,ByVal filename As String,ByVal Data() As Byte)        Dim fileOpen As Boolean        Dim file As System.IO.fileStream = nothing        Dim StartTime As DateTime        Dim MaxWaitSeconds As Integer = 120        StartTime = DateTime.Now        fileOpen = False        Do            Try                file = New System.IO.fileStream(filePath & filename,IO.fileMode.Append)                fileOpen = True            Catch ex As Exception                If DateTime.Now.Subtract(StartTime).TotalSeconds > MaxWaitSeconds Then                    Throw New Exception("Waited more than " & MaxWaitSeconds & " To Open file.")                Else                    Dim fileWatch As System.IO.fileSystemWatcher                    fileWatch = New System.IO.fileSystemWatcher(filePath,filename)                    fileWatch.WaitForChanged(IO.WatcherChangeTypes.Changed,5000)                End If                fileOpen = False            End Try        Loop While Not fileOpen        If fileOpen Then            file.Write(Data,Data.Length)            file.Close()        End If    End Sub
总结

以上是内存溢出为你收集整理的c# – 当文件变得可访问时是否可以引发事件?全部内容,希望文章能够帮你解决c# – 当文件变得可访问时是否可以引发事件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1246636.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存