插件开发技术说明(15)---文件自动分目录存储
2015-09-15 06:16
417 查看
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(); ///< 确定当前输出路径 ////< 取目录下子目录个数,最大目录id unsigned 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); }
相关文章推荐
- Lua的表(字典)
- LeetCode Ugly Number
- LeetCode Ugly Number
- Repeated DNA Sequences 解答
- Python二分查找详解
- JSP经典学习笔记(包含各种入门常用语法)
- JSP基本语句用法总结
- JSP学习之JavaBean用法分析
- JSP学习之Servlet用法分析
- JSP常见的文件操作小结
- js正则表达式验证大全(收集)
- js正则表达式基本语法(精粹)
- linux grep正则表达式与grep用法详解
- 正则表达式在IOS中的应用及IOS中三种正则表达式的使用与比较
- 写出高效率的正则表达式技巧总结
- ASP.NET设计FTP文件上传的解决方案
- asp将本地的文件上传到服务器
- asp.net上传文件到数据库的解决方案
- asp.net单文件带进度条上传的解决方案
- asp.net文件上传带进度条实现案例(多种风格)