使用FileSystemWatcher监视文件变化

public class Watcher
{

    
public static void Main()
    
{
    Run();

    }


    [PermissionSet(SecurityAction.Demand, Name
="FullTrust")]
    
public static void Run()
    
{
        
string[] args = System.Environment.GetCommandLineArgs();
 
        
// If a directory is not specified, exit program.
        if(args.Length != 2)
        
{
            
// Display the proper way to call the program.
            Console.WriteLine("Usage: Watcher.exe (directory)");
            
return;
        }


        
// Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path 
= args[1];
        
/* Watch for changes in LastAccess and LastWrite times, and 
           the renaming of files or directories. 
*/

        watcher.NotifyFilter 
= NotifyFilters.LastAccess | NotifyFilters.LastWrite 
           
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
        
// Only watch text files.
        watcher.Filter = "*.txt";

        
// Add event handlers.
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created 
+= new FileSystemEventHandler(OnChanged);
        watcher.Deleted 
+= new FileSystemEventHandler(OnChanged);
        watcher.Renamed 
+= new RenamedEventHandler(OnRenamed);

        
// Begin watching.
        watcher.EnableRaisingEvents = true;

        
// Wait for the user to quit the program.
        Console.WriteLine("Press \'q\' to quit the sample.");
        
while(Console.Read()!='q');
    }


    
// Define the event handlers.
    private static void OnChanged(object source, FileSystemEventArgs e)
    
{
        
// Specify what is done when a file is changed, created, or deleted.
       Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
    }


    
private static void OnRenamed(object source, RenamedEventArgs e)
    
{
        
// Specify what is done when a file is renamed.
        Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
    }

}

需要注意的两点:
1. 必须设置watcher.EnableRaisingEvents为true才可以开始监视
2. 使用watcher.WaitForChanged(WatcherChangeTypes.Changed,1000)方法时必须指定第二个参数timeout,如果不指定,则程序会一直在等待。

posted @ 2007-04-01 20:44  玉开  阅读(1599)  评论(0编辑  收藏  举报