Страница: 1 |
Вопрос: как отловить создание файла в директории? | Добавлено: 27.04.06 12:41 |
Автор вопроса: ![]() |
Ситуация такая: Запущено приложение, в момент появления в директории (допустим это будет директория /check_in )
файла, программа анализирует его, и взависимости от его содержания перемещает в другую папку или удаляет его и ждет появления очередного файла. Так вот вопрос: как средствами VB.NET отследить появление любого файла в директории? Если можно - примерчик. Опрашивать постоянно из программы - лишняя работа, потому что файл может появляться и 1 раз в сутки, а может за несколько суток вообще не появиться. |
Ответы | Всего ответов: 6 |
Номер ответа: 1 Автор ответа: ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 23 Ответов: 879 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 28.04.06 01:09 |
System.IO.FileSystemWatcher fsw;
fsw.Changed+=new FileSystemEventHandler(HandleChangedCreatedDeleted); // обработчик события // будет вызвана функция HandleChangedCreatedDeleted { // включаем слежение fsw.Path = txtPath.Text; fsw.IncludeSubdirectories = chkIncludeSubdirectories.Checked; } |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() Вопросов: 2 Ответов: 2 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 28.04.06 05:53 |
Сенькс всем откликнувшимся за ответы, все получилось. К тому же в МСДН нашел и пример использования FileSystemWatcher. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() Вопросов: 2 Ответов: 2 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 28.04.06 07:27 |
Помещаю пример использовани ![]() Imports System
Imports System.IO Namespace Watcher Module Watcher Public Sub Main() ![]() ![]() args = Environment.GetCommandLineArgs() appName = args(0) If (args.Length <> 2) Then Console.WriteLine("Usage: " + appname + "<directory>" ![]() Else ![]() 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 |
Страница: 1 |
|