コード例 #1
0
        private void WatchShares()
        {
            Log.Info(LogType.MusicShareWatcher, "Monitoring active for following shares:");
            Log.Info(LogType.MusicShareWatcher, "---------------------------------------");

            // Release existing FSW Objects first
            foreach (DelayedFileSystemWatcher watcher in m_Watchers)
            {
                watcher.EnableRaisingEvents = false;
                watcher.Dispose();
            }
            m_Watchers.Clear();
            foreach (String sharename in m_Shares)
            {
                try
                {
                    m_Events = ArrayList.Synchronized(new ArrayList(64));
                    // Create the watchers.
                    //I need 2 type of watchers. 1 for files and the other for directories
                    // Reason is that i don't know if the event occured on a file or directory.
                    // For a Create / Change / Rename i could figure that out using FileInfo or DirectoryInfo,
                    // but when something gets deleted, i don't know if it is a File or directory
                    DelayedFileSystemWatcher watcherFile      = new DelayedFileSystemWatcher();
                    DelayedFileSystemWatcher watcherDirectory = new DelayedFileSystemWatcher();
                    watcherFile.Path      = sharename;
                    watcherDirectory.Path = sharename;
                    /* Watch for changes in LastWrite times, and the renaming of files or directories. */
                    watcherFile.NotifyFilter      = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.Attributes;
                    watcherDirectory.NotifyFilter = NotifyFilters.DirectoryName;
                    // Monitor all Files and subdirectories.
                    watcherFile.Filter = "*.*";
                    watcherFile.IncludeSubdirectories      = true;
                    watcherDirectory.Filter                = "*.*";
                    watcherDirectory.IncludeSubdirectories = true;

                    // Add event handlers.
                    watcherFile.Changed += new FileSystemEventHandler(OnChanged);
                    watcherFile.Created += new FileSystemEventHandler(OnCreated);
                    watcherFile.Deleted += new FileSystemEventHandler(OnDeleted);
                    watcherFile.Renamed += new RenamedEventHandler(OnRenamed);
                    // For directories, i'm only interested in a Delete event
                    watcherDirectory.Deleted += new FileSystemEventHandler(OnDirectoryDeleted);
                    watcherDirectory.Renamed += new RenamedEventHandler(OnRenamed);

                    // Begin watching.
                    watcherFile.EnableRaisingEvents      = true;
                    watcherDirectory.EnableRaisingEvents = true;
                    m_Watchers.Add(watcherFile);
                    m_Watchers.Add(watcherDirectory);

                    // Start Timer for processing events
                    m_Timer           = new Timer(m_TimerInterval);
                    m_Timer.Elapsed  += new ElapsedEventHandler(ProcessEvents);
                    m_Timer.AutoReset = true;
                    m_Timer.Enabled   = watcherFile.EnableRaisingEvents;
                    Log.Info(LogType.MusicShareWatcher, sharename);
                }
                catch (ArgumentException ex)
                {
                    Log.Info(LogType.MusicShareWatcher, "Unable to turn on monitoring for: {0} Exception: {1}", sharename,
                             ex.Message);
                }
            }
            Log.Info(LogType.MusicShareWatcher, "---------------------------------------");
            Log.Info(LogType.MusicShareWatcher, "Note: Errors reported for CD/DVD drives can be ignored.");
        }
コード例 #2
0
    private void WatchShares()
    {
      Log.Info(LogType.MusicShareWatcher, "Monitoring active for following shares:");
      Log.Info(LogType.MusicShareWatcher, "---------------------------------------");

      // Release existing FSW Objects first
      foreach (DelayedFileSystemWatcher watcher in m_Watchers)
      {
        watcher.EnableRaisingEvents = false;
        watcher.Dispose();
      }
      m_Watchers.Clear();
      foreach (String sharename in m_Shares)
      {
        try
        {
          m_Events = ArrayList.Synchronized(new ArrayList(64));
          // Create the watchers. 
          //I need 2 type of watchers. 1 for files and the other for directories
          // Reason is that i don't know if the event occured on a file or directory.
          // For a Create / Change / Rename i could figure that out using FileInfo or DirectoryInfo,
          // but when something gets deleted, i don't know if it is a File or directory
          DelayedFileSystemWatcher watcherFile = new DelayedFileSystemWatcher();
          DelayedFileSystemWatcher watcherDirectory = new DelayedFileSystemWatcher();
          watcherFile.Path = sharename;
          watcherDirectory.Path = sharename;
          /* Watch for changes in LastWrite times, and the renaming of files or directories. */
          watcherFile.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.Attributes;
          watcherDirectory.NotifyFilter = NotifyFilters.DirectoryName;
          // Monitor all Files and subdirectories.
          watcherFile.Filter = "*.*";
          watcherFile.IncludeSubdirectories = true;
          watcherDirectory.Filter = "*.*";
          watcherDirectory.IncludeSubdirectories = true;

          // Add event handlers.
          watcherFile.Changed += new FileSystemEventHandler(OnChanged);
          watcherFile.Created += new FileSystemEventHandler(OnCreated);
          watcherFile.Deleted += new FileSystemEventHandler(OnDeleted);
          watcherFile.Renamed += new RenamedEventHandler(OnRenamed);
          // For directories, i'm only interested in a Delete event
          watcherDirectory.Deleted += new FileSystemEventHandler(OnDirectoryDeleted);
          watcherDirectory.Renamed += new RenamedEventHandler(OnRenamed);

          // Begin watching.
          watcherFile.EnableRaisingEvents = true;
          watcherDirectory.EnableRaisingEvents = true;
          m_Watchers.Add(watcherFile);
          m_Watchers.Add(watcherDirectory);

          // Start Timer for processing events
          m_Timer = new Timer(m_TimerInterval);
          m_Timer.Elapsed += new ElapsedEventHandler(ProcessEvents);
          m_Timer.AutoReset = true;
          m_Timer.Enabled = watcherFile.EnableRaisingEvents;
          Log.Info(LogType.MusicShareWatcher, sharename);
        }
        catch (ArgumentException ex)
        {
          Log.Info(LogType.MusicShareWatcher, "Unable to turn on monitoring for: {0} Exception: {1}", sharename,
                   ex.Message);
        }
      }
      Log.Info(LogType.MusicShareWatcher, "---------------------------------------");
      Log.Info(LogType.MusicShareWatcher, "Note: Errors reported for CD/DVD drives can be ignored.");
    }