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));
     }
 }