FileSystem.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  1. #ifndef __FILE_SYSTEM_H
  2. #define __FILE_SYSTEM_H // 20240226
  3. #include "Types.h"
  4. #include "ExHeaders.h"
  5. namespace tzc {
  6. class StreamFile;
  7. class PrimeFile;
  8. class BigFile;
  9. /* continue form ErrorCode of common */
  10. typedef enum __FILESYSTEM_ERRORCODE {
  11. E_FS_PATH_NULL = -0x3001,
  12. E_FAILED_CREATE_DIR = -0x3002,
  13. E_FAILED_OPEN_DIR = -0x3003,
  14. E_FS_ISNOT_DIR = -0x3011,
  15. E_FS_INVAILED_NAME = -0x3012,
  16. } EN_FS_ERROR;
  17. typedef enum __FILE_TYPE {
  18. FT_UNKNOWN = -1, /* 未知 */
  19. FT_ALL = 0, /* (全部文件类型,仅限查询时使用) */
  20. FT_REG = 1, /* 普通文件 */
  21. FT_DIRC = 1 << 1, /* 目录 */
  22. FT_LINK = 1 << 2, /* 软链接文件 */
  23. FT_BLOCK = 1 << 3, /* 块设备文件 */
  24. FT_CHAR = 1 << 4, /* 字符设备文件 */
  25. FT_FIFO = 1 << 5, /* 管道文件 */
  26. FT_SOCKET = 1 << 7, /* 套接字文件 */
  27. } EN_FILE_TYPE;
  28. /* 文件信息 */
  29. struct FileInfo {
  30. TZ_INT FileType; // tzc::EN_FILE_TYPE
  31. TZ_BOOL IsHidden;
  32. TZ_BOOL IsExist;
  33. TZ_BOOL IsRead;
  34. TZ_BOOL IsWrite;
  35. TZ_BOOL IsExec;
  36. TZ_Int64 FileSize;
  37. TZ_Int64 LastTime; /* 最后修改时间 秒级时间戳 */
  38. std::string BaseDir; /* 文件基路径 /home/admin/xxx.suffix 的 /home/admin/ */
  39. std::string Name; /* 文件名称 xxx.suffix */
  40. std::string Suffix; /* 文件后缀 xxx.suffix 的 .suffix */
  41. };
  42. /**
  43. * @brief Path 类对文件系统的路径操作进行了封装
  44. *
  45. * @note 1、Path类可以识别不规范的路径字符串:
  46. * 例如在Linux可以识别 \usr\local 路径字符串(规范字符串使用 '/');
  47. * 在Windows可以识别E:/aa/bb (规范字符 '\')
  48. */
  49. class DECLDLL Path {
  50. using PathQueue_t = std::list<std::string>;
  51. public:
  52. using PathIterator = PathQueue_t::iterator;
  53. using PathConstIterator = PathQueue_t::const_iterator;
  54. static const std::string SPCH; // path separator char
  55. public:
  56. /**
  57. * @brief Path类对文件系统的操作记录将输出到单独的文件,这些内容独立于Logger日志
  58. *
  59. * @param enable 操作记录默认关闭 需手动开启
  60. *
  61. * @note 操作记录将输出到当前目录下
  62. * 文件命名规则: .filesystem.${pid}.log
  63. */
  64. static void SetOutput(TZ_BOOL enable = FALSE);
  65. public: // construction and deconstruction
  66. Path();
  67. Path(const std::string & path);
  68. Path(const Path & path); // copy construction
  69. Path(Path && path); // move construction
  70. ~Path();
  71. public: // override
  72. Path & operator = (const Path & path);
  73. Path & operator = (Path && path);
  74. Path & operator = (const std::string & path);
  75. Path & operator += (const Path & path);
  76. Path & operator += (Path && path);
  77. Path & operator += (const std::string & path);
  78. TZ_BOOL operator == (const Path & path);
  79. TZ_BOOL operator == (Path && path);
  80. TZ_BOOL operator == (const std::string & path);
  81. /* Path类型的隐式转换 */
  82. operator std::string () const;
  83. public: /* 这个public部分的函数仅改变Path对象本身, 不会更改硬盘信息 */
  84. /**
  85. * @brief 向Path对象中追加路径
  86. *
  87. * @example
  88. * 当前有 Path对象path, 文件系统有路径"/home/admin/project/proj1/aa.txt"
  89. * 当前path对象保存了路径 "/home/admin/";
  90. * 若想使path对象保存 "/home/admin/project/proj1"
  91. * 可调用函数
  92. * path.PushDir("project/proj1/");
  93. * 或 path.PushDir("project").PushDir("proj1");
  94. */
  95. Path & PushDir(const std::string & dir);
  96. /**
  97. * @brief 从Path对象中减少目录层级
  98. *
  99. * @param level 无符号数 移除的目录层数
  100. *
  101. * @return TZ_BOOL 若操作成功则返回TRUE; 否则返回FALSE
  102. *
  103. * @note 需自行保证有效性
  104. *
  105. * @example
  106. * 当前有 Path对象path, path当前保存了 "/home/admin/project/proj1"
  107. * 若想使path返回上一级目录
  108. * path.PopDir(); 或 path.PopDir(1);
  109. * 若想使path返回上两级目录
  110. * path.PopDir(2);
  111. */
  112. TZ_BOOL PopDir(TZ_Uint32 level = 1);
  113. PathConstIterator Begin() const;
  114. PathConstIterator End() const;
  115. /**
  116. * @brief 获取层级数
  117. */
  118. size_t Size() const;
  119. /**
  120. * @brief 清理Path对象,使Path对象不包含任何路径, 不影响任何磁盘信息
  121. */
  122. void Clear();
  123. /**
  124. * @brief Path对象没有保存任何路径时返回TRUE
  125. */
  126. TZ_BOOL IsEmpty() const;
  127. /**
  128. * @brief 获取当前 Path 类对象包含的路径
  129. *
  130. * @return path string
  131. *
  132. * @note In Linux, the path is split by '/'.
  133. * In Windows, the path is split by '\'
  134. */
  135. std::string ToString() const;
  136. /**
  137. * @brief 获取绝对路径
  138. *
  139. * @note 根据当前保存路径获取绝对路径,不会改变当前对象的内容
  140. *
  141. */
  142. std::string ToAbsolutionPath() const;
  143. /**
  144. * @brief 获取当前路径的父目录
  145. */
  146. std::string GetBasePath() const;
  147. /**
  148. * @brief 获取当前路径叶节点名称
  149. *
  150. * @example
  151. * 1、../ => ..
  152. * 2、 ./ => .
  153. * 3、/home/admin => admin
  154. */
  155. std::string GetLeafName() const;
  156. /**
  157. * @brief 将Path对象内的相对路径转换为绝对路径
  158. */
  159. void ConvertAbsolutionPath();
  160. /**
  161. * @brief 判断当前Path对象是否是传入参数的祖先路径
  162. *
  163. * @note !!不建议使用相对路径进行路径关系判断
  164. *
  165. * @example
  166. * 存在路径 /home/admin/project/common/include/Logger.h
  167. * 存在路径 /home/admin/project/common/source/Logger.cpp
  168. * 存在路径 /home/admin/test
  169. * 当前Path对象已保存路径:/home/admin/project/, 则:
  170. *
  171. * 1、this->IsParentPath("/home/admin/project/")
  172. * 或 this->IsParentPath(Path("/home/admin/project/"))
  173. *
  174. * 返回FALSE:若两个路径相等, 不认为具有祖先关系
  175. *
  176. * 2、this->IsParentPath("/home/admin/project/common/source/Logger.cpp")
  177. * 或 this->IsParentPath(Path("/home/admin/project/common/source/Logger.cpp"))
  178. *
  179. * 返回TRUE: 当前对象(/home/admin/project/) 是传入对象或路径的祖先
  180. *
  181. * 3、this->IsParentPath("/home/admin/test")
  182. * 或 this->IsParentPath(Path("/home/admin/test"))
  183. *
  184. * 返回FALSE:当前对象(/home/admin/project/) 与传入对象或路径(/home/admin/test)不具有祖先关系
  185. *
  186. */
  187. TZ_BOOL IsParentPath(const Path & path);
  188. TZ_BOOL IsParentPath(const std::string & path);
  189. /**
  190. * @brief 判断当前Path对象是否是传入参数的后代路径
  191. *
  192. * @note !!不建议使用相对路径进行路径关系判断
  193. *
  194. * @example
  195. * 存在路径 /home/admin/project/common/include/Logger.h
  196. * 存在路径 /home/admin/project/common/source/Logger.cpp
  197. * 存在路径 /home/admin/test
  198. * 当前Path对象已保存路径:/home/admin/project/common/include/, 则:
  199. *
  200. * 1、this->IsSubPath("/home/admin/project/common/include/")
  201. * 或 this->IsSubPath(Path("/home/admin/project/common/include/"))
  202. *
  203. * 返回FALSE:若两个路径相等, 不认为具有后代关系
  204. *
  205. * 2、this->IsSubPath("/home/admin/project/")
  206. * 或 this->IsSubPath(Path("/home/admin/project/"))
  207. *
  208. * 返回TRUE:当前对象(/home/admin/project/common/include/) 是
  209. * 传入对象或路径(/home/admin/project/)的后代路径
  210. *
  211. * 3、this->IsSubPath("/home/admin/project/common/source/Logger.cpp")
  212. * 或 this->IsSubPath(Path("/home/admin/project/common/source/Logger.cpp"))
  213. *
  214. * 返回FALSE: 当前对象(/home/admin/project/common/include/) 不是传入对象或路径的后代路径
  215. *
  216. * 4、注意!!
  217. * 若存在绝对路径/home/admin/project/common/include/
  218. * 程序在路径/home/admin/project/common/include运行, 初始化Path对象路径为./
  219. *
  220. * 判断路径关系 Path("./").IsSubPath("/home/admin/project/"); 将会返回FALSE
  221. *
  222. * 分析:
  223. * 路径关系判断基于初始化路径字符串的, "." 不等于 "home" , 因此返回FALSE
  224. *
  225. * 但是Path对象指向的 "./" 的实际路径(/home/admin/project/common/include)确实为
  226. * 路径(/home/admin/project/) 的后代路径, 若想得到与实际情况一致的结果,需将对象
  227. * 转换为绝对路径后进行比较。
  228. */
  229. TZ_BOOL IsSubPath(const Path & path);
  230. TZ_BOOL IsSubPath(const std::string & path);
  231. /**
  232. * @brief 检查路径各级名称是否合法
  233. *
  234. * @note Linux: 文件或目录名称不能超过255个字符 !不推荐使用特殊字符('<' '>' '?' '*')
  235. * Windows: 长度不超过256字节 不能使用 / \ : * ? " < > |
  236. */
  237. TZ_BOOL CheckName();
  238. /** @brief 返回 当前保存路径和 dir的拼接字符串 */
  239. const std::string Joint(const std::string & dir) const;
  240. public:
  241. /**
  242. * @brief 拼接路径
  243. */
  244. static const std::string Joint(const std::string & path, const std::string & dir);
  245. protected:
  246. /**
  247. * @brief 重新分配构造对象
  248. */
  249. void assign(const std::string & path);
  250. /**
  251. * @brief 解析路径字符串
  252. */
  253. void serialize(const std::string & path);
  254. void serialize(const std::list<std::string> & list);
  255. /**
  256. * @brief 对路径中存在的相对路径进行优化
  257. *
  258. * @example "./aa/bb/cc/../../../" => "./"
  259. */
  260. void format();
  261. /**
  262. * @brief 不带格式的
  263. */
  264. std::string tostring() const;
  265. TZ_BOOL isAllBaseDir() const;
  266. protected:
  267. /**
  268. * @note m_pathList 的第一项若为 "." 或 ".." 则代表这是相对路径,否则为绝对路径
  269. */
  270. std::list<std::string> m_pathList;
  271. };
  272. // Path override operator +
  273. Path operator + (const Path & path, const Path & pathr);
  274. Path operator + (const Path & path, const std::string & str);
  275. Path operator + (const std::string & str, const Path & path);
  276. /**
  277. * @brief ExecPath 完全继承Path, 在Path的基础上实现了对文件系统的操作
  278. *
  279. * Path 处理路径
  280. * ExecPath 实现文件系统操作
  281. */
  282. class DECLDLL ExecPath : public Path {
  283. public:
  284. ExecPath();
  285. ExecPath(const std::string & path);
  286. ExecPath(const Path & path); // copy construction
  287. ExecPath(Path && path); // move construction
  288. ExecPath(const ExecPath & path); // copy construction
  289. ExecPath(ExecPath && path); // move construction
  290. public: /** 对文件系统的若干操作 */
  291. /**
  292. * @brief
  293. * 以下若干函数用于获取路径指向的目录或文件的属性,包括 存在性,读写执行权限,
  294. * 隐藏性,文件类型;或这些信息的集合
  295. *
  296. * @param path 一个合法的路径字符串,可以是文件,可以是目录
  297. *
  298. * @return TZ_BOOL
  299. */
  300. /** @brief 判断当前对象包含的路径是否存在 */
  301. TZ_BOOL IsExist() const;
  302. TZ_BOOL IsExec() const;
  303. TZ_BOOL IsRead() const;
  304. TZ_BOOL IsWrite() const;
  305. TZ_BOOL IsHidden() const;
  306. /**
  307. * @brief 获取文件信息
  308. */
  309. FileInfo GetFileInfo() const;
  310. /**
  311. * @brief 文件类型判断
  312. * @return enum tzc::EN_FILE_TYPE
  313. */
  314. TZ_INT GetFileType() const;
  315. /** @brief 判断当前对象包含的路径是否是目录 */
  316. TZ_BOOL IsDirectory() const;
  317. /** @brief 判断当前对象包含的路径是否是普通文件 */
  318. TZ_BOOL IsRegFile() const;
  319. /** @brief 判断当前对象包含的路径是否是软连接文件 */
  320. TZ_BOOL IsLinkFile() const;
  321. /** @brief 判断当前对象包含的路径是否是隐藏文件 */
  322. TZ_BOOL IsHiddenFile() const;
  323. /** @brief 判断当前对象包含的路径是否是块设备文件 */
  324. TZ_BOOL IsBlockDevFile() const;
  325. /** @brief 判断当前对象包含的路径是否是字符设备文件 */
  326. TZ_BOOL IsCharDevFile() const;
  327. /** @brief 判断当前对象包含的路径是否是FIFO文件 */
  328. TZ_BOOL IsFifoFile() const;
  329. /** @brief 判断当前对象包含的路径是否是套接字文件 */
  330. TZ_BOOL IsSocketFile() const;
  331. /** @brief 获取文件实际大小 */
  332. TZ_Int64 GetFileSize() const;
  333. /** @brief 获取文件占用空间大小 */
  334. TZ_Int64 GetFileUsage() const;
  335. /**
  336. * @brief 获取文件最后一次访问时间
  337. * @return 秒级时间戳
  338. */
  339. TZ_Int64 LastVisitTime() const;
  340. /**
  341. * @brief 获取文件最后一次内容被修改时间
  342. * @return 秒级时间戳
  343. */
  344. TZ_Int64 LastContentModifyTime() const;
  345. /**
  346. * @brief 获取文件最后一次文件属性被修改时间
  347. * @return 秒级时间戳
  348. */
  349. TZ_Int64 LastStatusModifyTime() const;
  350. /**
  351. * @brief
  352. * 以下若干函数用于查询路径指向的目录内包含的文件或目录列表
  353. * 可选择仅获取列表或详细信息
  354. *
  355. * @param type 来自 enum tzc::EN_FILE_TYPE
  356. * @param pre std::string 前缀
  357. * @param suffix std::string 后缀
  358. *
  359. * @note 若路径指向的不是一个目录, 则报错
  360. */
  361. TZ_INT GetFileList(std::list<std::string> & list, TZ_Uint32 type = 0) const;
  362. TZ_INT GetFileList(std::list<FileInfo> & list, TZ_Uint32 type = 0) const;
  363. TZ_INT GetFileListByPre(std::list<std::string> & list,
  364. const std::string & pre, TZ_Uint32 type = 0) const;
  365. TZ_INT GetFileListByPre(std::list<FileInfo> & list,
  366. const std::string & pre, TZ_Uint32 type = 0) const;
  367. TZ_INT GetFileListBySuffix(std::list<std::string> & list,
  368. const std::string & suffix, TZ_Uint32 type = 0) const;
  369. TZ_INT GetFileListBySuffix(std::list<FileInfo> & list,
  370. const std::string & suffix, TZ_Uint32 type = 0) const;
  371. /**
  372. * @brief 创建路径指向的目录
  373. *
  374. * @note 若路径不存在则创建
  375. */
  376. TZ_INT CreateDir();
  377. /**
  378. * @brief 确保目录存在
  379. *
  380. * @note 此函数判断路径是否存在
  381. * 若存在,则返回TRUE;
  382. * 若不存在,则创建指向的目录,并返回TRUE;
  383. * 若不存在且创建失败,则返回FALSE
  384. */
  385. TZ_BOOL AssureExist();
  386. /**
  387. * @brief 在当前路径下创建子目录
  388. *
  389. * @return 成功返回0; 失败返回非0值
  390. */
  391. TZ_INT CreateSubDir(const Path & path);
  392. TZ_INT CreateSubDir(const std::string & path);
  393. /**
  394. * @brief 移除当前包含的目录
  395. *
  396. * @param isForce TZ_BOOL 若为真,则立即移除包含目录(相当于 rm -rf)
  397. *
  398. * @note 此函数仅能删除空目录,如果需要删除非空目录,需指定isForce为真
  399. */
  400. TZ_INT Remove(TZ_BOOL isForce = FALSE);
  401. /**
  402. * @brief 对当前路径的叶节点进行重命名
  403. *
  404. * @param name std::string 文件或目录的新名称 名称需符合当前系统命名规则
  405. * 重命名操作仅在当前目录进行, name中不能出现 字符\ 或 字符/
  406. *
  407. * @note !此函数不能进行文件或目录的移动 移动需使用 Move函数
  408. * !操作成功将会改变Path对象内存储的路径
  409. *
  410. * @return 成功返回0,失败返回非0值
  411. */
  412. TZ_INT Rename(const std::string & name);
  413. /**
  414. * @brief 将当前路径指向的文件或目录 移动 到新路径
  415. * !操作成功将会改变Path对象内存储的路径
  416. *
  417. * @param path std::string path必须是一个 已存在的 目录 路径
  418. *
  419. * @note 1、若当前保存的路径指向一个文件,则将此文件移动到path内
  420. * 2、若当前保存的路径指向一个目录,则将此目录整体移动到path内
  421. */
  422. TZ_INT Move(const std::string & path);
  423. /**
  424. * @brief 清空当前路径(如果是一个目录)下的所有文件
  425. *
  426. * @param type 来自 enum tzc::EN_FILE_TYPE
  427. */
  428. TZ_INT ClearDir(TZ_Uint32 type = 0);
  429. /**
  430. * @brief 获取文件夹下所有文件的总大小,会递归计算文件夹下的文件夹
  431. * @return 成功返回文件总大小, 失败返回-1
  432. *
  433. * @note 若当前指向一个不存在的路径,返回-1
  434. * 若当前指向一个文件 返回这个文件的大小
  435. * 若当前指向一个文件夹 返回这个文件夹的总大小
  436. *
  437. * 这个函数计算的是文件内容的大小,不是占用空间的大小
  438. */
  439. TZ_Int64 GetDirectoryContentSize() const;
  440. public: /** common link */
  441. SPtr<class tzc::StreamFile> GetStreamFilePtr() const;
  442. SPtr<class tzc::PrimeFile> GetPrimeFilePtr() const;
  443. SPtr<class tzc::BigFile> GetBigFilePtr() const;
  444. Path GetPathObject();
  445. };
  446. namespace filesystem {
  447. /**
  448. * @brief 获取当前工作路径
  449. */
  450. DECLDLL std::string GetCurWorkDir();
  451. /**
  452. * @brief 检测 path 是否存在
  453. *
  454. * @param path 一个合法的路径字符串,可以是文件,可以是目录
  455. *
  456. * @return TZ_BOOL
  457. */
  458. DECLDLL TZ_BOOL IsExist(const std::string & path);
  459. /**
  460. * @brief 检测 path 是否具有可执行权限
  461. *
  462. * @param path 一个合法的路径字符串,可以是文件,可以是目录
  463. *
  464. * @return TZ_BOOL
  465. */
  466. DECLDLL TZ_BOOL IsExec(const std::string & path);
  467. /**
  468. * @brief 检测 path 是否具有读取权限
  469. *
  470. * @param path 一个合法的路径字符串,可以是文件,可以是目录
  471. *
  472. * @return TZ_BOOL
  473. */
  474. DECLDLL TZ_BOOL IsRead(const std::string & path);
  475. /**
  476. * @brief 检测 path 是否可写
  477. *
  478. * @param path 一个合法的路径字符串,可以是文件,可以是目录
  479. *
  480. * @return TZ_BOOL
  481. */
  482. DECLDLL TZ_BOOL IsWrite(const std::string & path);
  483. /**
  484. * @brief 判断path是否是隐藏文件
  485. */
  486. DECLDLL TZ_BOOL IsHidden(const std::string & path);
  487. /**
  488. * @brief 获取文件类型
  489. *
  490. * @return enum tzc::EN_FILE_TYPE
  491. *
  492. */
  493. DECLDLL TZ_INT GetFileType(const std::string & path);
  494. /**
  495. * @brief 获取文件信息
  496. */
  497. FileInfo GetFileInfo(const std::string & path);
  498. /**
  499. * @brief 仅创建当前
  500. *
  501. */
  502. DECLDLL TZ_INT CreateDir(const std::string & path);
  503. DECLDLL TZ_INT Remove(const std::string & path, TZ_BOOL isForce = FALSE);
  504. /**
  505. * @brief 对路径的叶节点进行重命名
  506. *
  507. * @param name std::string 文件或目录的新名称 名称需符合当前系统命名规则
  508. * 重命名操作仅在当前目录进行, name中不能出现 字符\ 或 字符/
  509. *
  510. * @note !此函数不能进行文件或目录的移动 移动需使用 Move函数
  511. *
  512. * @return 成功返回0,失败返回非0值
  513. */
  514. DECLDLL TZ_INT Rename(const std::string & path, const std::string & name);
  515. /**
  516. * @brief 将路径指向的文件或目录 移动或重命名 到新路径
  517. */
  518. DECLDLL TZ_INT Move(const std::string & path, const std::string & newpath);
  519. /**
  520. * @brief 清空当前路径(如果是一个目录)下的所有文件
  521. *
  522. * @param type 来自 enum tzc::EN_FILE_TYPE
  523. */
  524. DECLDLL TZ_INT ClearDir(const std::string & path, TZ_Uint32 type = 0);
  525. /**
  526. * @brief 获取指定目录下的文件列表
  527. *
  528. * @param type 来自 enum tzc::EN_FILE_TYPE
  529. */
  530. DECLDLL TZ_INT GetFileList(const std::string & path, std::list<std::string> & list,
  531. TZ_Uint32 type = 0);
  532. /**
  533. * @brief 获取指定目录下的文件列表和文件详细信息
  534. *
  535. * @param type 来自 enum tzc::EN_FILE_TYPE
  536. */
  537. DECLDLL TZ_INT GetFileList(const std::string & path, std::list<FileInfo> & list,
  538. TZ_Uint32 type = 0);
  539. /**
  540. * @brief 根据前缀获取指定目录下文件列表
  541. *
  542. * @param type 来自 enum tzc::EN_FILE_TYPE
  543. */
  544. DECLDLL TZ_INT GetFileListByPre(const std::string & path, std::list<std::string> & list,
  545. const std::string & pre, TZ_Uint32 type = 0);
  546. /**
  547. * @brief 根据前缀获取指定目录下文件列表和文件详细信息
  548. *
  549. * @param type 来自 enum tzc::EN_FILE_TYPE
  550. */
  551. DECLDLL TZ_INT GetFileListByPre(const std::string & path, std::list<FileInfo> & list,
  552. const std::string & pre, TZ_Uint32 type = 0);
  553. /**
  554. * @brief 根据后缀获取指定目录下文件列表
  555. *
  556. * @param type 来自 enum tzc::EN_FILE_TYPE
  557. */
  558. DECLDLL TZ_INT GetFileListBySuffix(const std::string & path, std::list<std::string> & list,
  559. const std::string & suffix, TZ_Uint32 type = 0);
  560. /**
  561. * @brief 根据后缀获取指定目录下文件列表和文件详细信息
  562. *
  563. * @param type 来自 enum tzc::EN_FILE_TYPE
  564. */
  565. DECLDLL TZ_INT GetFileListBySuffix(const std::string & path, std::list<FileInfo> & list,
  566. const std::string & suffix, TZ_Uint32 type = 0);
  567. /**
  568. * @brief 检查路径各级名称是否合法
  569. */
  570. DECLDLL TZ_BOOL CheckName(const std::string & path);
  571. } // namespace filesystem
  572. }; // namespace tzc {
  573. #endif // !__FILE_SYSTEM_H