2014-01-13 60 views
-2

^^^该答案在C#!我正在使用VB.NET! ^^^VB.NET FileSystemWatcher - 复制创建的文件

我正在使用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 

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

+0

如果你看看[这](http://stackoverflow.com/a/10982222/26742)回答您可能会找到一个合适的解决方案 –

+0

@SaniHuttunen如果你仔细看,你会注意到我使用VB.NET而不是C# – MRC

+1

VB.NET和C#的工作方式完全相同。他们都依赖于.NET Framework。将C#代码翻译成VB.NET很容易。 –

回答

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 
+0

我似乎在看最前面的答案。我现在明白了这个想法。 _waitingforclose将是一个字符串数组? – MRC

+0

是的。字符串数组或字符串列表就足够了。 –

+0

文件关闭时是否触发了'listener_Changed'?如果不是,则此代码隐藏错误。如果你不打算处理这个错误,你不应该在'Try ... Catch'中包装东西。 –