Как реализовать обработку файлов в Windows Service? - PullRequest
1 голос
/ 04 мая 2011

Как создать службу мониторинга Windows (C #) для нескольких каталогов, чтобы сканировать новые файлы и (если они есть) редактировать, переименовывать, перемещать их в другое место? Я создал WorkerTask(), но он работает только для файлов, которые находятся в каталоге при запуске службы, а не для тех, которые я поместил туда позже. Он должен работать 24/7.

private void WorkerTask() {
    while (running) {
    // only 1 input dir in this case
    string[] filePaths = Directory.GetFiles(input_dir, "*.jpg");
      if (filePaths.Lenght > 0)
      {
        foreach (String file_path in filePaths)
        {
            // some other operations before moving
            File.Move(file_path, output_file_path);
        }
      }
    }
}

Как я могу постоянно сканировать новые (только полные!) Файлы, которые загружаются в эту папку? Он должен работать с задержкой не более 2-3 секунд между сканированиями, поэтому, как только файл попадает в папку, он обрабатывается и перемещается. Я видел FileSystemWatcher(), но я думаю, что попытка реализовать его для нескольких входных папок может быть плохой идеей.

Ответы [ 2 ]

3 голосов
/ 04 мая 2011
public void Start()
{
    FileSystemWatcher fsw = new FileSystemWatcher();
    fsw.Path = "\\server\share";  //or use your inputdir
    fsw.NotifyFilter = NotifyFilters.Size;  //(several others available)
    fsw.Filter = "*.jpg";
    fsw.Changed += new FileSystemEventHandler(OnChanged);
    fsw.EnableRaisingEvents = true;
}

private void OnChanged(object source, FileSystemEventArgs e)
{
    //do stuff.
}
1 голос
/ 04 мая 2011

Используйте класс FileSystemWatcher, вот для чего он.

Он имеет несколько событий, на которые вы можете подписаться - когда файлы создаются, обновляются и удаляются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...