Ejemplo n.º 1
0
        public async Task Watch(string verzeichnis, int pollingIntervallInMilliseconds)
        {
            while (true)
            {
                var newFiles = Enumerable.Empty <WatchedFile>();

                try
                {
                    newFiles = GetDirectoryFiles(verzeichnis);
                }
                catch (Exception e)
                {
                    Trace.TraceError("Fehler {0}, {1}, {2}", DateTime.Now, e.Message, e.StackTrace);
                }

                var watchedFiles = new WatchedFiles(_files);
                // Datei erstellt
                ExecuteStrategy(() => watchedFiles.GetCreatedFiles(newFiles), Alphabet.CREATE);
                // Datei geupdated
                ExecuteStrategy(() => watchedFiles.GetUpdatedFiles(newFiles), Alphabet.MODIFY);
                // Datei gelöscht
                ExecuteStrategy(() => watchedFiles.GetDeletedFiles(newFiles), Alphabet.DELETE);

                _files = newFiles;

                await Task.Delay(pollingIntervallInMilliseconds);
            }
        }
Ejemplo n.º 2
0
        private void OnFileWatcherCreated(object sender, FileSystemEventArgs e)
        {
            mutex.WaitOne();
            string path  = e.FullPath;
            string name  = System.IO.Path.GetFileName(path);
            int    index = ExpectingFiles.IndexOf(path);

            if (index >= 0)
            {
                ExpectingFiles.RemoveAt(index);
                WatchedFiles.Add(path);
                ItemAdded?.Invoke(this, new WatchingItemEventArgs(ItemType.File, path, name));
            }
            else
            {
                foreach (DirectoryScanOptions scanOptions in ScanOptions)
                {
                    if (scanOptions.IsIncluded(name, path, ItemType.File))
                    {
                        ItemAdded?.Invoke(this, new WatchingItemEventArgs(ItemType.File, path, name));
                        break;
                    }
                }
            }
            mutex.Set();
        }
Ejemplo n.º 3
0
        public void GetDeletedFiles_WhenCalled_ReturnsTrue()
        {
            var oldFiles     = GetRandomFiles(2);
            var changedFiles = oldFiles.Take(1).ToList();

            var diff = new WatchedFiles(oldFiles).GetDeletedFiles(changedFiles);

            Assert.Single(diff);
            Assert.Equal(diff.Single(), oldFiles.Last());
        }
Ejemplo n.º 4
0
        public void GetCreatedFiles_WhenCalled_ReturnsTrue()
        {
            var oldFiles     = GetRandomFiles(1);
            var changedFiles = oldFiles.Concat(GetRandomFiles(1));

            var diff = new WatchedFiles(oldFiles).GetCreatedFiles(changedFiles);

            Assert.Single(diff);
            Assert.Equal(diff.Single(), changedFiles.Last());
        }
 private void UnWatchDocumentForChanges(string fullFilePath, Action <object, FileSystemEventArgs> onChangedAction)
 {
     if (WatchedFiles.ContainsKey(fullFilePath))
     {
         WatchedFiles[fullFilePath].Changed            -= onChangedAction.Invoke;
         WatchedFiles[fullFilePath].EnableRaisingEvents = false;
         WatchedFiles[fullFilePath].Dispose();
         WatchedFiles.Remove(fullFilePath);
     }
 }
Ejemplo n.º 6
0
        public void GetUpdatedFiles_WhenCalled_ReturnsTrue()
        {
            var oldFiles = GetRandomFiles(2);
            var clones   = oldFiles.Take(1).Select(f => Clone(f)).ToList();

            clones.ForEach(c => c.ZeitStempel = DateTime.Now);

            var diff = new WatchedFiles(oldFiles).GetUpdatedFiles(clones);

            Assert.Single(diff);
        }
Ejemplo n.º 7
0
        private void OnFileWatcherRenamed(object sender, RenamedEventArgs e)
        {
            mutex.WaitOne();
            string removedPath = e.OldFullPath;
            string removedName = System.IO.Path.GetFileName(removedPath);
            string addedPath   = e.FullPath;
            string addedName   = System.IO.Path.GetFileName(addedPath);
            int    index       = WatchedFiles.IndexOf(removedPath);

            if (index >= 0)
            {
                WatchedFiles.RemoveAt(index);
                ExpectingFiles.Add(removedPath);
                ItemRemoved?.Invoke(this, new WatchingItemEventArgs(ItemType.File, removedPath, removedName));
            }
            else
            {
                foreach (DirectoryScanOptions scanOptions in ScanOptions)
                {
                    if (scanOptions.IsIncluded(removedName, removedPath, ItemType.File))
                    {
                        ItemRemoved?.Invoke(this, new WatchingItemEventArgs(ItemType.File, removedPath, removedName));
                        break;
                    }
                }
            }
            index = ExpectingFiles.IndexOf(addedPath);
            if (index >= 0)
            {
                ExpectingFiles.RemoveAt(index);
                WatchedFiles.Add(addedPath);
                ItemAdded?.Invoke(this, new WatchingItemEventArgs(ItemType.File, addedPath, addedName));
            }
            else
            {
                foreach (DirectoryScanOptions scanOptions in ScanOptions)
                {
                    if (scanOptions.IsIncluded(addedName, addedPath, ItemType.File))
                    {
                        ItemAdded?.Invoke(this, new WatchingItemEventArgs(ItemType.File, addedPath, addedName));
                        break;
                    }
                }
            }
            mutex.Set();
        }
        private void WatchDocumentForChanges(string fullFilePath, Action <object, FileSystemEventArgs> onChangedAction)
        {
            if (!WatchedFiles.ContainsKey(fullFilePath))
            {
                var fsw = new FileSystemWatcher();


                fsw.BeginInit();
                fsw.Path   = Path.GetDirectoryName(fullFilePath);
                fsw.Filter = Path.GetFileName(fullFilePath);
                fsw.IncludeSubdirectories = false;
                fsw.NotifyFilter          = NotifyFilters.LastWrite;


                fsw.Changed            += onChangedAction.Invoke;
                fsw.EnableRaisingEvents = true;
                fsw.EndInit();

                WatchedFiles.Add(fullFilePath, fsw);
            }
        }