VB.NET FileSystemWatcher-复制创建的文件

VB.NET FileSystemWatcher-复制创建的文件,vb.net,filesystemwatcher,Vb.net,Filesystemwatcher,答案是C!我正在使用VB.NET^^^ 我正在使用FileSystemWatcher监视文件夹中的新文件 此子系统在检测到更改时触发,然后将文件复制到服务器 Private Sub OnCreated(source As Object, e As FileSystemEventArgs) Dim LocalFile As String = e.FullPath Dim ServerFile As String = LocalFile.Replace(loca

答案是C!我正在使用VB.NET^^^

我正在使用FileSystemWatcher监视文件夹中的新文件

此子系统在检测到更改时触发,然后将文件复制到服务器

   Private Sub OnCreated(source As Object, e As FileSystemEventArgs)
        Dim LocalFile As String = e.FullPath
        Dim ServerFile As String = LocalFile.Replace(localSyncPath, serverSyncPath)

        Try
            File.Copy(LocalFile, ServerFile)
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try

    End Sub
问题是,这通常会弹出一个错误,表示文件正在使用中。有没有一种方法可以运行一个循环来不断尝试,直到成功?甚至复制正在使用的DispSite?

我给你检查的内容很容易翻译成VB.NET:

Public Shared Sub listener_Created(sender As Object, e As FileSystemEventArgs)
    Console.WriteLine("File Created:" & vbLf + "ChangeType: " + e.ChangeType + vbLf & "Name: " + e.Name + vbLf & "FullPath: " + e.FullPath)
    Try
        File.Copy(e.FullPath, "D:\levani\FolderListenerTest\CopiedFilesFolder\" + e.Name)
    Catch
        _waitingForClose.Add(e.FullPath)
    End Try
    Console.Read()
End Sub

Public Shared Sub listener_Changed(sender As Object, e As FileSystemEventArgs)
    If _waitingForClose.Contains(e.FullPath) Then
        Try
            File.Copy(...)
            _waitingForClose.Remove(e.FullPath)
        Catch
        End Try
    End If
End Sub

若你们看一下答案,你们可能会找到一个合适的答案solution@SaniHuttunen如果你仔细观察,你会发现我使用的是VB.NET而不是C#VB.NET和C#的工作方式完全相同。它们都依赖于.NET框架。把C#代码翻译成VB.NET很容易。@SaniHuttunen那么为什么要把它分为两个类别呢?@Joey所以学一点C#。我好像在看最上面的答案。我现在明白了。waitingforclose将是一个字符串数组?是。字符串数组或字符串列表就足够了。文件关闭时是否触发了
listener\u更改
?如果不是,则此代码只是隐藏错误。你不应该用
来包装东西,试试看。。。Catch
如果您不打算处理错误,那么我会采用另一种方法,每30秒重试一次。对我来说,这似乎比在文件更改时只重试一次更合理。做了一个快速测试。当文件被解锁时,似乎不会触发事件。