2015-08-08 2 views
0

У меня есть требование контролировать корневую папку, в которой есть несколько папок и каждая папка, содержащая несколько файлов (.csv). Эти файлы копируются на рабочую станцию ​​с сервера, используя некоторые другие сторонние инструменты. Я должен отслеживать папку корневой папки рабочей станции, и когда файл CSV создается или обновляется в любой из дочерних папок, мне приходится записывать данные CSV-файла (обновленные или новые) в базу данных sql-сервера. При записи данных на сервер sql мне нужно записать имя дочерней папки, в которой был обновлен/создан файл CSV. Таким образом, я могу иметь данные отдельной папки в одном файле базы данных.VB.Net FileSystemWatcher - несколько папок и несколько файлов

При запуске программы на ПК рабочей станции приложение аварийно завершает работу без какого-либо конкретного сообщения об ошибке. А поскольку приложение запускается на удаленном ПК, я не могу отлаживать приложение, чтобы проверить, какая строка вызывает сбой. Ниже приведен код:

Public Class FolderWatchAndProcess 
Dim blnMonitorUpdated As Boolean = True 
Dim blnMonitorCreated As Boolean = True 
Dim blnShowMessage As Boolean 
Dim strFullFileName As String 
Dim strFileName As String 
Dim strFolderName As String 
Private Delegate Sub updateLabel(ByVal newLabel As String) 

Private Sub updateLabelHandler(ByVal labelText As String) 
    lblMetNo.Text = labelText 
End Sub 

Private Sub ReadAndInsertCSVData() 
' This routine checks for duplicates and inserts new records into the sql server database 
End Sub 

Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    'lblMonitorPath.Text = "C:\RootFolder\" 
    'btnStartWatching_Click(Nothing, Nothing) 
    'Me.WindowState = FormWindowState.Minimized 
End Sub 

Private Sub btnStartWatching_Click(sender As Object, e As EventArgs) Handles btnStartWatching.Click 
    btnStartWatching.Text = "Stop Watching" 
    Dim aFileWatcherInstance As ArrayList = New ArrayList 
    For Each sMonitorFolder As String In lstFolders.Items 
     If IO.Directory.Exists(sMonitorFolder) Then 
      Dim oFileWatcher As FileSystemWatcher = New FileSystemWatcher 
      oFileWatcher.Path = sMonitorFolder 
      oFileWatcher.Filter = "*.CSV" 
      If blnMonitorUpdated Then 
       AddHandler oFileWatcher.Changed, AddressOf Me.FileSystemWatcherUpdated 
      Else 
       'RemoveHandler , AddressOf Me.FileSystemWatcherUpdated 
      End If 
      If blnMonitorCreated Then 
       AddHandler oFileWatcher.Created, AddressOf Me.FileSystemWatcherCreated 
      Else 
       'RemoveHandler , AddressOf Me.FileSystemWatcherCreated 
      End If 
      oFileWatcher.EnableRaisingEvents = True 
      aFileWatcherInstance.Add(oFileWatcher) 
     End If 
    Next 
End Sub 

Private Sub FileSystemWatcherCreated(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) 
    strFullFileName = e.FullPath 
    strFileName = Mid(e.Name, 3, Len(e.Name)) 
    strFolderName = strFileName.Split("_")(0) 
    If Me.InvokeRequired Then 
     Dim d As New updateLabel(AddressOf updateLabelHandler) 
     Me.BeginInvoke(d, New Object() {strFolderName}) 
    Else 
     updateLabelHandler(strFolderName) 
    End If 
    ReadAndInsertCSVData() 
End Sub 

Private Sub FileSystemWatcherDeleted(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) 
    'A file has been deleted from the child directory. 
End Sub 

Private Sub FileSystemWatcherUpdated(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) 
    strFullFileName = e.FullPath 
    strFileName = Mid(e.Name, 3, Len(e.Name)) 
    strFolderName = strFileName.Split("_")(0) 
    If Me.InvokeRequired Then 
     Dim d As New updateLabel(AddressOf updateLabelHandler) 
     Me.BeginInvoke(d, New Object() {strFolderName}) 
    Else 
     updateLabelHandler(strFolderName) 
    End If 
    ReadAndInsertCSVData() 
End Sub 

End Class

Любая помощь будет оценена.

+1

вы добавить примерки поймать блок и регистрировать любую ошибку в журнале событий? сложно устранить неисправность программы без каких-либо подсказок. – terryfkjc

+0

Я пробовал это и не мог обнаружить никаких ошибок при обновлении нескольких папок с помощью скопирования. Может ли это быть вызвано подпрограммой сервера SQL или вызвано сторонним инструментом синхронизации, поскольку файл используется во время копирования и все еще может быть использован до завершения операции копирования с сервера. – chlorinelemon

+0

В вашем приложении обязательно подпишитесь на ** AppDomain.CurrentDomain.UnhandledException **, а когда это произойдет, запишите исключение. Затем добавьте исключение, которое вы нашли в этом вопросе. – miroxlav

ответ

Смежные вопросы