protected void Watcher_Created(object sender, FileSystemEventArgs e) { try { var path = e.FullPath; if (!path.EndsWith(".avi", StringComparison.OrdinalIgnoreCase) && !path.EndsWith(".mpg", StringComparison.OrdinalIgnoreCase) && !path.EndsWith(".mpeg", StringComparison.OrdinalIgnoreCase) && !path.EndsWith(".rm", StringComparison.OrdinalIgnoreCase) && !path.EndsWith(".rmvb", StringComparison.OrdinalIgnoreCase) && !path.EndsWith(".wmv", StringComparison.OrdinalIgnoreCase)) { return; } var segments = path.Split(new[] { '\\' }, StringSplitOptions.RemoveEmptyEntries).Reverse(); var source = segments.First(); var category = segments.Skip(1).Take(1).Single(); if (category == "视频") { var target = path.Substring(0, path.LastIndexOf('.')) + TagetExtension; if (!File.Exists(target)) { var table = engine.OpenXTable<string, ConvertingResource>("Video"); table[path] = new ConvertingResource { Target = target, Started = false }; Log("Todo", string.Format("{0} --> {1}", path, target)); engine.Commit(); StartConvert(); } } } catch (Exception exception) { try { watcher.Dispose(); } catch { } Log("Error", exception.StackTrace.ToString(CultureInfo.InvariantCulture)); } }
protected override void OnStart(string[] args) { try { Log("Service", "Start"); watcher = new FileSystemWatcher(); watcher.BeginInit(); watcher.IncludeSubdirectories = true; watcher.Path = ResourcePath; watcher.Created += Watcher_Created; watcher.EnableRaisingEvents = true; watcher.EndInit(); Log("Watching", "Start"); Log("Calculating", "Start"); DirectoryInfo info = new DirectoryInfo(ResourcePath); var dirs = info.GetDirectories("视频", SearchOption.AllDirectories); foreach (var dir in dirs) { var files = dir.GetFiles().Where(o => o.Name.EndsWith(".avi", StringComparison.OrdinalIgnoreCase) || o.Name.EndsWith(".mpg", StringComparison.OrdinalIgnoreCase) || o.Name.EndsWith(".mpeg", StringComparison.OrdinalIgnoreCase) || o.Name.EndsWith(".rm", StringComparison.OrdinalIgnoreCase) || o.Name.EndsWith(".rmvb", StringComparison.OrdinalIgnoreCase) || o.Name.EndsWith(".wmv", StringComparison.OrdinalIgnoreCase)).ToList(); var table = engine.OpenXTable<string, ConvertingResource>("Video"); foreach (var file in files) { var path = file.FullName; var target = path.Substring(0, path.LastIndexOf('.')) + TagetExtension; if (!File.Exists(target)) { table[path] = new ConvertingResource { Target = target, Started = false }; Log("Todo", string.Format("{0} --> {1}", path, target)); } } engine.Commit(); } Log("Calculating", "Calculated"); StartConvert(); } catch (Exception exception) { try { watcher.Dispose(); } catch { } Log("Error", exception.StackTrace.ToString(CultureInfo.InvariantCulture)); } }