flyinghorse301 Ответов: 1

Vb .NET несколько экземпляров filesystemwatch


Я использую следующий код для мониторинга папки с помощью Filesystemwatch
Dim foldertowatch as New FileSystemWatcher()
foldertowatch.Path = source_folder

                With foldertowatch
                    'File type
                    .Filter = source_prefix & "*." & source_file_type
                    'Notify Filter
                    .NotifyFilter = .NotifyFilter Or NotifyFilters.FileName
                    .NotifyFilter = .NotifyFilter Or NotifyFilters.DirectoryName
                    'To watch sub directories....
                    .IncludeSubdirectories = sub_folder
                    'Handle new file created
                    AddHandler .Created, AddressOf Process

                    .EnableRaisingEvents = True
                End With


И, используя приведенные ниже подпрограммы для обработки созданных событий

Private Sub Process(ByVal Source As Object, ByVal evt As FileSystemEventArgs)
'To do...
End Sub


Теперь дело доходит до того, что мне нужно следить за несколькими папками, каждая папка с разными типами файлов и разными процессами. Например

Источник 1 - монитор pdf-файла при создании - Что нужно сделать: переименовать и сохранить в пункт назначения 1
Источник 2 - монитор txt-файла при создании - Что нужно сделать: переименовать и сохранить в пункт назначения 2
Источник 3 - мониторинг файла excel при создании - Что нужно сделать: переименовать и сохранить в пункт назначения 3
и так далее...

Что я уже пробовал:

Я попытался создать несколько экземпляров Filesystemwatch

Dim foldertowatch(total_items) As FileSystemWatcher
        For i = 0 To 10
            foldertowatch(i) = New FileSystemWatcher()

            foldertowatch(i).Path = source(i)

                With foldertowatch(i)
                    'File type
                    .Filter = source_prefix(i) & "*." & source_file_type(i)
                    'Notify Filter
                    .NotifyFilter = .NotifyFilter Or NotifyFilters.FileName
                    .NotifyFilter = .NotifyFilter Or NotifyFilters.DirectoryName
                    'To watch sub directories....
                    .IncludeSubdirectories = sub_folder(i)
                    'Handle new file created
                    AddHandler .Created, AddressOf Process

                    .EnableRaisingEvents = True
                End With
        Next


Но я не знаю, как справиться с событиями, вызванными из разных инстанций. В принципе, как я узнаю, какой экземпляр вызывает событие, чтобы продолжить переименование/сохранение в правильную папку.

1 Ответов

Рейтинг:
0

Jason Gleim

Класс FileSystemEventArgs имеет путь к файлу и свойство name. Используйте их, чтобы определить, какой файл затронут. Добавьте логику для определения типа файла/пути и делайте все, что вы хотите сделать с каждым типом файла или папки.

Смотреть также: FileSystemEventArgs на docs.microsoft.com