Страница: 1 |
Страница: 1 |
Вопрос: как отловить создание файла в директории?
Добавлено: 27.04.06 12:41
Автор вопроса: gsocol | Web-сайт:
Ситуация такая: Запущено приложение, в момент появления в директории (допустим это будет директория /check_in )
файла, программа анализирует его, и взависимости от его содержания перемещает в другую папку или удаляет его и ждет появления очередного файла.
Так вот вопрос: как средствами VB.NET отследить появление любого файла в директории? Если можно - примерчик. Опрашивать постоянно из программы - лишняя работа, потому что файл может появляться и 1 раз в сутки, а может за несколько суток вообще не появиться.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #1
Добавлено: 27.04.06 13:43
Там в нет есть какой-то маршал (или ефрейтор, точно не помню) который позволяет вызвать функцию FindFirstChangeNotification, которая вкупе с WaitForMultipleObjects позволяет мониторить изменение содержимого директорий.
Номер ответа: 2
Автор ответа:
ПтирЯ
Вопросов: 11
Ответов: 71
Профиль | | #2
Добавлено: 27.04.06 15:25
Попробуй посмотреть стандартный компонентик FileSystemWatcher. Он может вызывать events на нужные события.
ну а без него - так сажай на таймер просмотр и анализ папки
Номер ответа: 3
Автор ответа:
Александр Ларин
ICQ: 349720655
Вопросов: 0
Ответов: 3
Web-сайт:
Профиль | | #3
Добавлено: 27.04.06 16:57
В .NET есть компонента, которая нотифает за директориями. Сорри, но щас точно не смогу тебе подсказать как реализовать удачнее. Давай в аську - завтра/послезавтра - помогу
Номер ответа: 4
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #4
Добавлено: 28.04.06 01:09
fsw.Changed+=new FileSystemEventHandler(HandleChangedCreatedDeleted);
// обработчик события
// будет вызвана функция HandleChangedCreatedDeleted
{
// включаем слежение
fsw.Path = txtPath.Text;
fsw.IncludeSubdirectories = chkIncludeSubdirectories.Checked;
}
Номер ответа: 5
Автор ответа:
gsocol
Вопросов: 2
Ответов: 2
Web-сайт:
Профиль | | #5
Добавлено: 28.04.06 05:53
Сенькс всем откликнувшимся за ответы, все получилось. К тому же в МСДН нашел и пример использования FileSystemWatcher.
Номер ответа: 6
Автор ответа:
gsocol
Вопросов: 2
Ответов: 2
Web-сайт:
Профиль | | #6
Добавлено: 28.04.06 07:27
Помещаю пример использовани
Imports System.IO
Namespace Watcher
Module Watcher
Public Sub Main()
 im args As String()
 im appName As String
args = Environment.GetCommandLineArgs()
appName = args(0)
If (args.Length <> 2) Then
Console.WriteLine("Usage: " + appname + "<directory>"
Else
 im watcher As FileSystemWatcher
watcher = New FileSystemWatcher()
watcher.Path = args(1)
watcher.NotifyFilter = NotifyFilters.FileName Or NotifyFilters.Attributes Or NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.Security Or NotifyFilters.Size
AddHandler watcher.Changed, AddressOf OnChanged
AddHandler watcher.Created, AddressOf OnChanged
AddHandler watcher.Deleted, AddressOf OnChanged
AddHandler watcher.Renamed, AddressOf OnRenamed
watcher.EnableRaisingEvents = True
End If
Console.WriteLine("Press Enter to quit the sample"
Console.WriteLine()
Console.ReadLine()
End Sub
Public Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
Console.WriteLine("File: {0} {1}", e.FullPath, e.ChangeType.ToString("G")
End Sub
Public Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
Console.WriteLine("File: {0} Renamed to {1}", e.OldFullPath, e.FullPath)
End Sub
End Module
End Namespace