VB.NET FileSystemWatcher-复制创建的文件
答案是C!我正在使用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
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秒重试一次。对我来说,这似乎比在文件更改时只重试一次更合理。做了一个快速测试。当文件被解锁时,似乎不会触发事件。