public void Start(string path, string[] extensions, string fileNamePattern, string fileNamePatternCollection, ActionType actionType) { _directoriesProcessed = new List <string>(); _collectionDirectories = new Dictionary <string, bool>(); var files = _storage.Directory.GetFiles(path, SearchOption.AllDirectories, extensions); foreach (var file in files) { var preTag = _storage.File.ReadTag(file); if (preTag != null) { var tag = preTag.Tag; if (!(string.IsNullOrEmpty(tag?.Album) || string.IsNullOrEmpty(tag.Title))) { var fileExtension = Path.GetExtension(file); bool isPartOfACollection = IsPartOfCollection(file, extensions); var newFileName = _tagFileProcessor.CalculateFileName(tag, path, fileExtension, ((isPartOfACollection) ? fileNamePatternCollection : fileNamePattern), isPartOfACollection); if (!string.Equals(file.ToLower(), newFileName.ToLower())) { _storage.File.Create(newFileName, _storage.File.Read(file)); if (actionType == ActionType.Move) { _storage.File.Delete(file); } if (_directoriesProcessed.All(d => d != Path.GetDirectoryName(file))) { ProcessNonMusicContents(Path.GetDirectoryName(file), Path.GetDirectoryName(newFileName), extensions, actionType); } } } } } CleanupEmptyDirectories(path); }