Windows服务中的文件观察者

时间:2011-11-16 08:31:45

标签: c# vb.net windows-services

我是初学者,正在尝试开发一种Windows服务,该服务不断检查任何新文件或更改文件的文件夹(或文件夹组)。一旦它检测到任何新文件或更改(文件或文件夹),它就会复制文件(和任何新文件夹)并将其粘贴到另一个位置。

我使用Windows窗体应用程序做了同样的事情,但在Windows服务中我不知道该怎么做 - 我该如何在Windows服务中执行此操作?

3 个答案:

答案 0 :(得分:7)

您可以使用FileSystemWatcher类。

答案 1 :(得分:0)

以下是我们如何使用没有计时器的文件观察器来完成此任务

public void ProcessFile(string filepath)
    {
        var fileN ="newfilename";
        string destfile = "E:\\2nd folder" + fileN;
        File.Copy(filepath, destfile, true);
    }

    protected override void OnStart(string[] args)
    {
       String[] files = Directory.GetFiles("E:\\", "*.*");
        foreach (string file in files)
        {
            ProcessFile(file);
        }
        var fw = new FileSystemWatcher("folderpath");
        fw.IncludeSubdirectories = false;
        fw.EnableRaisingEvents = true;
        fw.Created += Newfileevent;

    }
    static void Newfileevent(object sender, FileSystemEventArgs e)
    {
        ProcessFile(e.FullPath);

    }

答案 2 :(得分:-4)

以下是此问题的正确答案

public static void MyMethod()
{
    String[] files = Directory.GetFiles("E:\\", "*.*");
    foreach (string file in files)
    {
        var fileN = file.Substring(2);
        string destfile = "E:\\2nd folder" + fileN;
        File.Copy(file, destfile, true);
    }
}

需要轮询以在修复时间间隔后观察文件....此代码正在观看文件2秒

protected override void OnStart(string[] args)
{
    timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
    timer.Interval = 2000;
    timer.Enabled = true; 
    MyMethod();
}