C# 如何在Windows服务中实现文件处理?

C# 如何在Windows服务中实现文件处理?,c#,windows-services,directory,C#,Windows Services,Directory,如何为多个目录创建监视Windows服务(C#),以扫描新文件并(如果有)编辑、重命名、移动到其他地方?我创建了一个WorkerTask(),但它只适用于我启动服务时目录中的文件,而不适用于我稍后放在目录中的文件。它必须全天候运行 private void WorkerTask() { while (running) { // only 1 input dir in this case string[] filePaths = Directory.GetFiles(inp

如何为多个目录创建监视Windows服务(C#),以扫描新文件并(如果有)编辑、重命名、移动到其他地方?我创建了一个
WorkerTask()
,但它只适用于我启动服务时目录中的文件,而不适用于我稍后放在目录中的文件。它必须全天候运行

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()
,但我认为尝试为多个输入文件夹实现它可能不是一个好主意。

使用该类,这就是它的用途

它有几个您可以订阅的事件—当创建、更新和删除文件时。

使用该类,这就是它的用途

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.
}

当创建、更新和删除文件时,您可以订阅几个事件。

为什么您认为对多个输入文件夹使用
FileSystemWatcher
不是一个好主意?为什么您认为对多个输入文件夹使用
FileSystemWatcher
不是一个好主意?我可以用它来扫描,比方说,50-100个不同的文件夹?如果我在一些快速的服务器上运行它,它会工作吗?@yosh-我认为您需要50-100个实例(除非您正在查看子文件夹)。由于这是事件驱动的,我不知道速度与此有什么关系。我可以用它来扫描,比方说,50-100个不同的文件夹?如果我在一些快速的服务器上运行它,它会工作吗?@yosh-我认为您需要50-100个实例(除非您正在查看子文件夹)。由于这是事件驱动的,我不知道速度与此有什么关系。
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.
}