【问题标题】:VB.NET FileSystemWatcher - Copy created file [duplicate]VB.NET FileSystemWatcher - 复制创建的文件[重复]
【发布时间】:2014-01-13 11:37:44
【问题描述】:

^^^ 答案在 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

问题是这通常会弹出一个错误,说文件正在使用中。有没有办法运行一个循环来继续尝试直到它工作?甚至复制尽管正在使用中?

【问题讨论】:

  • 如果您查看this 的答案,您可能会找到合适的解决方案
  • @SaniHuttunen 如果你仔细看你会发现我使用的是 VB.NET 而不是 C#
  • VB.NET 和 C# 的工作方式完全相同。它们都依赖于 .NET Framework。将 C# 代码转换为 VB.NET 很容易。
  • @SaniHuttunen 那为什么有 2 个单独的类别呢?
  • @Joey 所以学一点 C#。

标签: vb.net filesystemwatcher


【解决方案1】:

我给你看的link很容易翻译成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

【讨论】:

  • 我似乎在寻找最佳答案。我现在明白了这个想法。 _waitingforclose 将是一个字符串数组?
  • 是的。一个字符串数组或一个字符串列表就足够了。
  • 关闭文件时是否触发listener_Changed?如果不是,则此代码只是隐藏错误。如果您不打算处理错误,则不应将内容包装在 Try ... Catch 中。
  • 在这种情况下,我会采用另一个想法,每 30 秒重试一次。这对我来说似乎比文件更改时只重试一次更合理。
  • 做了一个快速测试。文件解锁时似乎不会触发事件。
猜你喜欢
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 2012-08-28
  • 2017-12-14
  • 2015-12-31
  • 1970-01-01
相关资源
最近更新 更多