private IEnumerable<IEnumerable<string>> GetAllFiles(string dir) { foreach (var subdir in Directory.EnumerateDirectories(dir)) { yield return GetAllFiles(subdir).SelectMany(s => s); } yield return Directory.EnumerateFiles(dir).Select(f => (f.StartsWith(_root) ? f.Substring(_root.Length) : f).TrimStart('\\')); }