Finder.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #ifndef _Finder_h_
  2. #define _Finder_h_
  3. #include "..\..\common_h\FileService.h"
  4. //Поиск файлов
  5. class Finder : public IFinder
  6. {
  7. enum Flags
  8. {
  9. f_normal = 0,
  10. f_mirror = 1,
  11. f_pack = 2,
  12. f_folder = 4,
  13. };
  14. struct FindFile
  15. {
  16. string path;
  17. long fileNameIndex;
  18. dword fileNameHash;
  19. dword flags;
  20. };
  21. public:
  22. Finder(const char * fullPath, const char * findMask, dword flags, const char * _cppFileName, long _cppFileLine);
  23. virtual ~Finder();
  24. //Удалить сообщив об ошибке
  25. void ErrorRelease();
  26. public:
  27. //Удалить объект
  28. virtual void Release();
  29. //Начать поиск заново, возвращает количество найденых файлов
  30. virtual dword Reset();
  31. //Получить количество найденых файлов
  32. virtual dword Count() const;
  33. //Получить полный путь с именем файла "С:\path\name.ext"
  34. virtual const char * FilePath(dword index) const;
  35. //Получить полный путь до файла "С:\path\"
  36. virtual const char * Path(dword index) const;
  37. //Получить имя файла "name.ext"
  38. virtual const char * Name(dword index) const;
  39. //Получить имя файла без расширения name
  40. virtual const char * Title(dword index) const;
  41. //Получить расширение файла "ext"
  42. virtual const char * Extension(dword index) const;
  43. //true если это "." или ".."
  44. virtual bool IsDot(dword index) const;
  45. //true если это папка
  46. virtual bool IsFolder(dword index) const;
  47. //true если этот файл найден в зеркальной директории
  48. virtual bool IsMirror(dword index) const;
  49. private:
  50. //Поиск файлов на диске
  51. void FindOnDisk(const char * findPath, const char * mirrorPath);
  52. //Рекурсивный поиск на диске
  53. void FindOnDiskRecursive(const char * findPath, const char * mirrorPath);
  54. //Поиск файлов в загруженых пак-файлах
  55. void FindInPacks();
  56. //Проверить точки ли это
  57. static bool IsDots(const char * str);
  58. private:
  59. string path;
  60. string mask;
  61. bool isRecursive;
  62. bool isDots;
  63. bool isAddFolders;
  64. bool isFindInLoadedPacks;
  65. bool isFindInMirrors;
  66. bool isInverseOrder;
  67. array<FindFile> files;
  68. mutable string buffer;
  69. #ifndef STOP_DEBUG
  70. const char * cppFileName;
  71. long cppFileLine;
  72. #endif
  73. };
  74. #endif