private void Subscribe_Changed(object sender, FileSystemEventArgs e) { try { Thread.Sleep(1000); FileInfo fileInfo = new FileInfo(e.FullPath); FileSubscriber subscriber = _listSubscriber.First(f => f.Key.FullName == fileInfo.FullName).Value; string tempFileName = DirFile.GetTempFile(); FileInfo fileInfoTemp = fileInfo.CopyTo(tempFileName); string fileName = fileInfo.Name; string extension = fileInfo.Extension; fileInfo = null; Task.Run(() => { lock (_locker) { using (Versions versions = new Versions() { SubscriberInfo = fileInfoTemp, Subscriber = subscriber, FileName = fileName, Extension = extension }) { versions.CreateNewVersionFile(); } _callUpdate.NeedNotified = true; _callUpdate.Call(subscriber); DirFile.DeleteFile(fileInfoTemp); fileInfoTemp = null; } }); } catch (Exception ex) { Errors.Save(ex); } }
internal void Subscribe(FileSubscriber subscriber, bool notified = true) { if (subscriber.Checked && !String.IsNullOrWhiteSpace(subscriber.Path)) { if (_listWather.FirstOrDefault(f => f.Key == subscriber).Key != null) { return; } FileInfo fileInfo = new FileInfo(subscriber.Path); FileSystemWatcher watcher = new FileSystemWatcher(fileInfo.DirectoryName, fileInfo.Name) { NotifyFilter = NotifyFilters.LastWrite }; _listSubscriber.Add(fileInfo, subscriber); watcher.Changed += Subscribe_Changed; watcher.EnableRaisingEvents = true; _listWather.Add(subscriber, watcher); using (Versions versions = new Versions() { SubscriberInfo = fileInfo, Subscriber = subscriber }) { versions.CreateDirectoryVersion(); } _callUpdate.NeedNotified = notified; _callUpdate.Call(subscriber); } }