DirectoryService.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using MediaBrowser.Model.Logging;
  6. namespace MediaBrowser.Controller.Providers
  7. {
  8. public class DirectoryService
  9. {
  10. private readonly ILogger _logger;
  11. private readonly Dictionary<string, List<FileSystemInfo>> _cache = new Dictionary<string, List<FileSystemInfo>>(StringComparer.OrdinalIgnoreCase);
  12. public DirectoryService(ILogger logger)
  13. {
  14. _logger = logger;
  15. }
  16. public List<FileSystemInfo> GetFileSystemEntries(string path)
  17. {
  18. List<FileSystemInfo> entries;
  19. if (!_cache.TryGetValue(path, out entries))
  20. {
  21. //_logger.Debug("Getting files for " + path);
  22. entries = new DirectoryInfo(path).EnumerateFileSystemInfos("*", SearchOption.TopDirectoryOnly).ToList();
  23. _cache.Add(path, entries);
  24. }
  25. return entries;
  26. }
  27. public IEnumerable<FileInfo> GetFiles(string path)
  28. {
  29. return GetFileSystemEntries(path).OfType<FileInfo>();
  30. }
  31. public IEnumerable<DirectoryInfo> GetDirectories(string path)
  32. {
  33. return GetFileSystemEntries(path).OfType<DirectoryInfo>();
  34. }
  35. public FileInfo GetFile(string path)
  36. {
  37. var directory = Path.GetDirectoryName(path);
  38. var filename = Path.GetFileName(path);
  39. return GetFiles(directory).FirstOrDefault(i => string.Equals(i.Name, filename, StringComparison.OrdinalIgnoreCase));
  40. }
  41. public DirectoryInfo GetDirectory(string path)
  42. {
  43. var directory = Path.GetDirectoryName(path);
  44. var name = Path.GetFileName(path);
  45. return GetDirectories(directory).FirstOrDefault(i => string.Equals(i.Name, name, StringComparison.OrdinalIgnoreCase));
  46. }
  47. }
  48. }