title: Filesystemwatcher double entries
body: <p>I made a small winforms application to monitor a certain folder for new pdf files, if a new pdf file is created in the particulair folder it will copy it to an other location.</p>
  
  <p>The problem i'm having is that the filesystemwatcher creates double/multiple entries in my listbox, how can i solve this?</p>
  
  <pre><code>namespace Scanmonitor
  {
      public partial class Form1 : Form
      {
          FileSystemWatcher watcher = new FileSystemWatcher();
          DateTime lastRead = DateTime.MinValue;
  
  
          public Form1()
          {
              InitializeComponent();
          }
  
          private void Form1_Load(object sender, EventArgs e)
          {
              FileWatch();
          }
  
          public void FileWatch()
          {
              watcher.Path = @"C:\Scanner";
              watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.LastWrite;
              watcher.Filter = "*.pdf";
              watcher.Changed += new FileSystemEventHandler(OnChanged);
              watcher.EnableRaisingEvents = true;
          }
  
          public void OnChanged(object source, FileSystemEventArgs e)
          {
              scannerListBox.Items.Add(e.FullPath);
              scannerListBox.SelectedIndex = scannerListBox.Items.Count - 1;
              FileMove(scannerListBox.SelectedItem.ToString());
          }
  
          public void FileMove(string filePath)
          {
              try
              {
                  System.IO.File.Copy(filePath, @"\\share\Data\Scans op OCE 600\" + Path.GetFileName(filePath));
              }
              catch (Exception ex)
              {
                  ToolLabel.Text = ex.Message.ToString();
              }
          }
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Got it working.</p>
  
  <pre><code>public void OnChanged(object source, FileSystemEventArgs e)
      {
          try
          {
              watcher.EnableRaisingEvents = false;
              FileInfo objFileInfo = new FileInfo(e.FullPath);
              if (!objFileInfo.Exists) return;
              System.Threading.Thread.Sleep(5000);
  
              FileInfo fileinformatie = new FileInfo(e.FullPath);
              string strCreateTime = fileinformatie.CreationTime.ToString();
              string strCreateDate = fileinformatie.CreationTime.ToString();
  
              strCreateTime = strCreateTime.Remove(strCreateTime.LastIndexOf(" "));
              strCreateDate = strCreateDate.Remove(0,strCreateDate.LastIndexOf(" "));
  
              ProcessAllFiles(e.FullPath, strCreateTime, strCreateDate);
          }
          catch (Exception ex)
          {
              ToolLabel.Text = ex.Message.ToString();
          }
          finally
          {
              watcher.EnableRaisingEvents = true;
          }
      }
  </code></pre>