首页 > 解决方案 > 该进程无法访问文件“路径”,因为在使用 FileSystemWatcher 时它正被另一个进程使用

问题描述

我无法在需要跟踪的文件夹中创建 excel 或 word 文件。如果在主目录跟踪处使用常规的新文件连续创建,它将报告这样的错误。我使用 filesystemwatcher 来跟踪文件

在此处输入图像描述

这是我的代码

Public Sub Createee(sender As Object, e As FileSystemEventArgs)
        Try
            Dim x = e.Name
            List1.Add(x)
            Dim path As String = e.FullPath
            Dim i = InStr(path, ".")
            Dim y = InStr(path, "~$")

            If File.Exists(path) Then
                List.Add(path)
            End If

            If path.EndsWith(".txt") Or path.EndsWith(".docx") Or path.EndsWith(".xlsx") Or path.EndsWith(".csv") Then
                If System.IO.Directory.Exists(path) Then
                    LbxWatching.Items.Add(Now.ToLocalTime & " - " & path & " - " & e.ChangeType.ToString)
                    List.Add(path)
                    'My.Computer.FileSystem.CopyDirectory(TbxFrom.Text, TbxTo.Text, True)
                    System.IO.File.Copy(path, TbxTo.Text.ToString & "\" & e.Name, True)
                End If
            End If

            If path.EndsWith(".txt") Or path.EndsWith(".docx") Or path.EndsWith(".xlsx") Or path.EndsWith(".csv") Then
                If i > 0 And y = 0 Then
                    If Not path.Substring(path.Length - 4) = ".tmp" And Not path.Substring(path.Length - 4) = ".TMP" Then
                        LbxWatching.Items.Add(Now.ToLocalTime & " - " & path & " - " & e.ChangeType.ToString)
                        List.Add(path)
                        'My.Computer.FileSystem.CopyDirectory(TbxFrom.Text, TbxTo.Text, True)
                        My.Computer.FileSystem.CopyFile(path, TbxTo.Text.ToString & "\" & e.Name, True)
                    End If
                End If
            End If

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        List.Clear()
        List1.Clear()
    End Sub

Private Sub FileWatcher_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            Dim appsettings = ConfigurationManager.AppSettings
            Dim result As String
            For Each result In appsettings
                If result = "Key0" Then
                    TbxFrom.Text = appsettings("Key0")
                ElseIf result = "Key1" Then
                    TbxTo.Text = appsettings("Key1")
                End If
            Next
            MapDrive("X", TbxTo.Text)
            Watcher = New FileSystemWatcher()
            Watcher.Path = TbxFrom.Text
            Watcher.Filter = "*.*"
            Watcher.IncludeSubdirectories = True

            Watcher.NotifyFilter = NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName

            AddHandler Watcher.Changed, AddressOf Modify
            AddHandler Watcher.Created, AddressOf Createee
            AddHandler Watcher.Deleted, AddressOf Delete
            AddHandler Watcher.Renamed, AddressOf ChangeName

            Watcher.EnableRaisingEvents = True

            CheckForIllegalCrossThreadCalls = False

            LbxWatching.Items.Clear()
            List = New ArrayList()
            List1 = New ArrayList()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

这只发生在我在监视文件夹中创建文件时,其他诸如编辑、删除文件或从其他地方复制一堆文件之类的东西都没有损坏。

标签: vb.net

解决方案


推荐阅读