FileService.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #ifndef _FileService_h_
  2. #define _FileService_h_
  3. #include "..\..\common_h\FileService.h"
  4. #include "..\..\common_h\CritSection.h"
  5. #include "FilesTree.h"
  6. class DataFileBase;
  7. class File;
  8. class IniFile;
  9. class Finder;
  10. class LoadBuffer;
  11. class PackFile;
  12. class MirrorPath;
  13. class XStreamDecompressor;
  14. class FileService : public IFileService
  15. {
  16. public:
  17. FileService();
  18. virtual ~FileService();
  19. bool Init();
  20. //Удаление записи об ресурсе
  21. void DeleteDataFile(DataFileBase * ptr);
  22. #ifndef _XBOX
  23. void DeleteFile(File * ptr);
  24. #endif
  25. void DeleteIniFile(IniFile * ptr);
  26. void DeleteFinder(Finder * ptr);
  27. void DeleteLoadBuffer(LoadBuffer * ptr);
  28. void DeletePackFile(PackFile * ptr);
  29. void DeleteMirrorPath(MirrorPath * ptr);
  30. public:
  31. //Открыть файл данных (файл может быть архивирован)
  32. virtual IDataFile * OpenDataFile(const char * fileName, IFileService_DFOpenMode mode, const char * cppFileName, long cppFileLine);
  33. //Открыть файл данных (файл может быть архивирован)
  34. IDataFile * OpenDataFile(const char * fileName, IFileService_DFOpenMode mode, bool isOutputError, const char * cppFileName, long cppFileLine);
  35. //Открыть ini файл
  36. virtual IIniFile * OpenIniFile(const char * fileName, const char * cppFileName, long cppFileLine);
  37. //Открыть ini файл
  38. IIniFile * OpenIniFile(const char * fileName, IFileService_DFOpenMode mode, const char * cppFileName, long cppFileLine);
  39. //Загрузить пак-файл в память
  40. virtual IPackFile * LoadPack(const char * fileName, const char * cppFileName, long cppFileLine);
  41. //Итератор поиска файлов
  42. virtual IFinder * CreateFinder(const char * findPath, const char * findMask, dword flags, const char * cppFileName, long cppFileLine);
  43. //Отразить один путь на другой
  44. virtual IMirrorPath * CreateMirrorPath(const char * from, const char * on, const char * cppFileName, long cppFileLine);
  45. //Прочитать файл в выделеную память с помощью OpenDataFile
  46. virtual ILoadBuffer * LoadData(const char * fileName, const char * cppFileName, long cppFileLine);
  47. //Получить указатель на системный ini-файл
  48. virtual IIniFile * SystemIni();
  49. //Получить полный нормализованный путь до файла, возвращает ссылку на result
  50. virtual string & BuildPath(const char * path, string & result);
  51. //Получить полный нормализованный путь до файла
  52. const char * BuildPath_noSafe(const char * path);
  53. //Заблокировать создание файлов
  54. virtual void LockFileAccess(bool isLock);
  55. #ifndef _XBOX
  56. //Проверить существует ли файл
  57. virtual bool IsExist(const char * fileName, bool checkAsDataFile);
  58. //Сохранить данные в файл с помощью OpenFile, перезаписав его
  59. virtual bool SaveData(const char * fileName, const void * data, dword size);
  60. //Открыть файл
  61. virtual IFile * OpenFile(const char * fileName, IFileService_OpenMode mode, const char * cppFileName, long cppFileLine);
  62. //Открыть файл
  63. IFile * OpenFile(const char * fileName, IFileService_OpenMode mode, bool isOutputError, const char * cppFileName, long cppFileLine);
  64. //Открыть ini файл для редактирования
  65. virtual IEditableIniFile * OpenEditableIniFile(const char * fileName, IFileService_OpenMode mode, const char * cppFileName, long cppFileLine);
  66. //Создать папку (возможно указать иерархический путь)
  67. virtual bool CreateFolder(const char * path);
  68. //Скопировать файл
  69. virtual bool Copy(const char * from, const char * to);
  70. //Переместить файл
  71. virtual bool Move(const char * from, const char * to);
  72. //Переименовать файл
  73. virtual bool Rename(const char * from, const char * to);
  74. //Удалить файл
  75. virtual bool Delete(const char * fileName);
  76. //Установить путь для сохранения открываемых файлов данных на чтение
  77. virtual void SetDrainPath(const char * path);
  78. //Создать пак-файл из файлов находящихся в заданной папке
  79. virtual bool BuildPack(const char * fileName, const char * folderPath, const char * filesMask, IFileService_PackCompressMethod method);
  80. #endif
  81. public:
  82. //Скопировать файл
  83. void DrainFile(const char * path);
  84. //Вывести в лог сообщение об ошибке
  85. void _cdecl Error(const char * error, ...);
  86. //Собрать все имена файлов с паков
  87. void CollectFilesFromPacks(array<const char *> & names);
  88. //Выделить декомпрессор для файла
  89. XStreamDecompressor * GetStreamDecompressor();
  90. //Удалить декомпрессор для файла
  91. void ReleaseStreamDecompressor(XStreamDecompressor * d);
  92. private:
  93. //Открытые файлы
  94. array<DataFileBase *> dataFiles;
  95. array<IniFile *> iniFiles;
  96. array<Finder *> finders;
  97. array<LoadBuffer *> buffers;
  98. array<PackFile *> packFiles;
  99. array<MirrorPath *> mirrorPaths;
  100. #ifndef _XBOX
  101. array<File *> rwFiles;
  102. #endif
  103. bool stopErrors;
  104. bool isLockFileAccess;
  105. public:
  106. FilesTree filesTree;
  107. ClassThread
  108. private:
  109. string currentPath; //Рабочий каталог, оканчивающийся на "\"
  110. string fullPath; //Буфер для генерации полного нормализованого пути
  111. string drainPath; //Путь для копирования открываемых файлов данных
  112. XStreamDecompressor * dcmprs; //Локальный декомпресор для открытого файла
  113. bool isUseDcmprs; //Занят ли в данный момент декомпрессор
  114. private:
  115. IIniFile * systemIni; //Системный ini Файл на момент создания сервиса
  116. IPackFile * iniPacks; //Пак с ini файлами
  117. public:
  118. static FileService * object;
  119. };
  120. #endif