插件开发技术说明(15)---文件自动分目录存储
来源:互联网 发布:python 模块大全 pdf 编辑:程序博客网 时间:2024/05/17 03:41
1.说明
用途:
.当文件数量很大,在单一目录下时无法容纳,需要把文件自动分散到不同的目录下.特性:
.指定一个$HOME目录,可限定每个目录下最多文件数量
.分级目录保存,如$HOME\1,$HOME\2.在$HOME\1下再分目录保存,以保证可容纳足够数量的文件.
按每个目录最大文件数2000个计算,3级可存储的文件数为:2000*2000*2000个文件
.文件名:外部指定,文件名重复时覆盖
.并行考虑:多进程或多线程的情况下,不同进程设置不同的输出目录:如把$HOME\1,$HOME\2分配给不同的进程。
其中,1,2作为域。输出文件设置主目录外,每个进程指定一个输出域。
2.实现
//////////////////////////////////////////////////////////////////// 目录层级信息struct CDirLevelInfo {unsigned int num_; ///< 目录(或文件)个数unsigned int max_id_; ///< 最大id public:CDirLevelInfo():num_(0),max_id_(0) {}};/////////////////////////////////////////////////////////////////class LS_API CFileStorageDisperser {int DetermineLastOutputPath(); ///< 上次最后输出路径信息.仅服务器启动时调用int OutputFile_i(const char *fn,unsigned char *buf,unsigned long len);int DetermineOutputPath(); ///< 确定当前输出路径////< 取目录下子目录个数,最大目录idunsigned int GetSubDir(string &dir,unsigned int &num,unsigned int &max_id);///< flag=1:文件数 flag=2目录数unsigned int GetDirFileNum(string &dir,int flag); ///< 检查目录下文件数void SetFileNumLimit(unsigned long max_num) { max_file_num_ = max_num; }CDirLevelInfo *dli_; ///< 目录层级信息public:string root_path_; ///< 主路径unsigned long cur_file_num_; ///< 当前文件目录下文件数unsigned long max_file_num_; ///< 每目录最大文件个数unsigned short dir_level_; ///< 子目录级数ACE_Thread_Mutex mutex_; ///< public:CFileStorageDisperser();~CFileStorageDisperser();int SetRootPath(string &path,unsigned int max_num=2000); string& GetRootPath() { return root_path_; }void SetDirLevel(unsigned short num);int OutputFile(const char *fn,unsigned char *buffer,unsigned int len,string *path_file); ///< 输出文件};
3.测试代码
CFileStorageDisperser fsd;//fsd.SetDirLevel(2); ///< 设置目录级数为2级string root = "filehome\\test_pic";fsd.SetRootPath(root,2); ///< 每个目录下最多2个文件int file_num=40; ///< 创建40个文件unsigned long len = 10;unsigned char *buffer = new unsigned char[len];for (int i=0;i<file_num;i++) {char file_name[256];sprintf(file_name,"pic%d",i+1);fsd.OutputFile(file_name,buffer,len);}
0 0
- 插件开发技术说明(15)---文件自动分目录存储
- c# fckeditor 上传文件自动分目录
- 插件开发技术说明(2)---rc_finder插件
- 插件开发技术说明(3)---letein插件
- WorldWind文件分片及存储目录说明
- 插件开发技术说明(15)---单据处理编程模式
- 插件开发技术说明(1)---前言
- 插件开发技术说明(4)---xml编程
- 插件开发技术说明(5)---分页处理
- 插件开发技术说明(11)---修改数据
- 文件上传之分目录存储及上传监听
- 插件开发技术说明(7)---读插件配置
- php 写日志文件 自动按周按类型分文件夹 存储
- 插件开发技术说明(17)---应用CRUD开发模式范例
- Notepad++插件:文件目录,自动补全,显示类,命令行
- 插件开发技术说明(6)---分页查询示例
- 插件开发技术说明(14)---服务配置访问
- 插件开发技术说明(16)---消除代码冗余
- 100 - SameTree
- SQL Server 2012 AlwaysOn高可用配置之九:添加侦听器
- LeetCode Ugly Number
- Ugly Number II
- Lua的表(字典)
- 插件开发技术说明(15)---文件自动分目录存储
- Linux程序包管理:RPM和YUM
- Lua的数组(key为1234的表)
- ZereneStacker 1.04 for Windows 焦点堆叠软件 简体中文 汉化
- 关于牛气轰轰的闭包
- java虚拟机回收机制原理
- 回调函数和钩子函数
- 蓝懿教育记录
- LeetCode Minimum Path Sum