自研工具类库:提升开发效率的实用之选
在软件开发的漫长历程中,开发者常常面临重复编写常用功能代码的困境,这不仅耗时费力,还容易引入错误。为打破这一僵局,提升开发效率,我精心打造了一套多功能工具类库。接下来,我将为大家详细介绍这套工具类库的具体内容。
一、工具类库概览
这套工具类库涵盖了文件操作、日志记录、程序启动管理、时间处理、配置读取以及 IP 地址验证等多个关键领域,旨在一站式解决开发过程中的常见问题。
(一)文件操作:FileUtil 类
在实际开发中,文件操作是非常频繁的任务。FileUtil类提供了两个极为实用的方法:
GetFileNames:用于遍历指定目录下的所有文件名称。它借助_findfirst和_findnext函数,高效地查找文件,并将文件名存入std::vectorstd::string中。当你需要获取某个文件夹下的所有文件列表时,这个方法就能派上用场。例如,在一个文件管理系统中,要展示某个目录下的所有文件,调用UTIL_GetFileNames方法,传入目录路径,就能轻松实现。
CreateMultipleDirectory:该方法用于创建文件,若文件夹不存在则依次创建。它通过_access函数检查目录是否存在,不存在则使用_mkdir函数创建。在需要保存文件到特定目录结构,但该目录结构可能不存在的情况下,调用UTIL_CreateMultipleDirectory方法,传入文件路径,就能确保目录被成功创建。比如在日志记录功能中,需要将日志文件保存到特定目录,就可以使用这个方法。
关键函数
1 | // 遍历此目录下所有文件名称 |
(二)日志记录:LogUtil 类
良好的日志记录是程序调试和维护的关键。LogUtil类以单例模式实现,具备强大的日志记录功能:
日志等级:定义了DEBUG、INFO、WARN、ERRORS、FATAL共 5 个日志等级,可根据不同的业务场景记录不同级别的日志。在开发阶段,使用DEBUG等级记录详细的调试信息;在生产环境中,使用INFO、WARN等等级记录关键信息和警告信息。
日志输出:log方法用于输出日志,它会在日志内容前添加时间戳、日志等级、文件名和行号,并且同时输出到控制台和指定文件中。例如,在程序运行过程中,出现错误时调用UTIL_INSTANCE_LogError方法,就能清晰地记录错误发生的时间、位置和具体信息。
日志文件管理:支持日志文件的打开、关闭和轮转。当日志文件大小达到设定的最大值时,会将当前日志文件重命名备份,并创建新的日志文件继续记录日志,确保日志文件不会无限增大。
关键函数
1 |
|
(三)程序启动管理:StartUtil 类
在多实例管理方面,StartUtil类的IsFirstStart方法发挥了重要作用。它通过创建指定名称的互斥量来判断程序是否首次启动。如果已有实例在运行,会记录错误日志,查找已运行程序的窗口并将其置于前端,同时弹出提示框告知用户软件已启动,请勿重复启动。这在确保程序同一时间只有一个实例运行的场景中非常实用,比如一些系统服务程序,不允许同时启动多个实例。
- 关键函数
1 | // 判断互斥量为${NAME}的程序是否第一次启动 |
(四)时间处理:TimeUtil 类
时间处理在很多应用场景中都至关重要。TimeUtil类同样采用单例模式,提供了丰富的时间处理功能:
GetCurrentTimeString:用于获取当前系统时间,并以指定格式返回字符串。在日志记录中,这个方法可以为日志添加准确的时间戳。
TimingStarts和TimingEnds:分别用于开始计时和结束计时,通过QueryPerformanceCounter函数获取时间差,精确计算程序运行时间。在性能测试场景中,这两个方法可以帮助开发者评估某个模块或函数的执行效率。
关键函数
1 | // 单例 |
(五)配置读取:UtilDefineBasic 类
UtilDefineBasic类负责从配置文件中读取配置信息。它使用pugixml库解析 XML 格式的配置文件,提供了GetUtilCongfig方法的多个重载版本,能够读取int、std::string、double等不同类型的配置值。在实际项目中,程序的一些参数,如日志文件的最大大小、程序的启动参数等,都可以通过配置文件进行管理,方便在不修改代码的情况下进行调整。
- 关键函数
1 | static UtilDefineBasic* instance(); |
(六)IP 地址验证:ValidUtil 类
在网络编程中,IP 地址验证是必不可少的环节。ValidUtil类的IsValidIp方法用于检查 IP 地址是否合法,并判断其是单播地址还是组播地址。它通过InetPton函数验证 IP 地址的格式,再根据地址的第一个字节判断地址类型。在网络连接模块中,这个方法可以确保用户输入的 IP 地址是有效的,避免因无效 IP 地址导致的连接失败问题。
- 关键函数
1 | // 检查ip是否合法,0:非法地址 1:单播地址 2:组播地址 |
二、使用方法与集成
(一)引入类库
在你需要使用此工具类库的地方引入动态库Util.dll和头文件Util.h。如果使用CMake构建项目,在CMakeLists.txt文件中,通过set命令设置第三方库列表,如set(THIRD_LIBRARY_LIST boost pugixml),并使用include命令引入相关的构建脚本,如include(..//module_standard.cmake) ,完成类库的引入配置。
(二)调用函数
在代码中通过导入工具类库的头文件,就可以直接调用其中的函数。例如,在需要记录日志的地方,调用UTIL_INSTANCE_LogDebug、UTIL_INSTANCE_LogInfo等宏定义函数;在处理文件操作时,调用UTIL_CreateMultipleDirectory和UTIL_GetFileNames函数;在验证 IP 地址时,调用UTIL_IsValidIp函数。
三、工具类库的优势
(一)提高开发效率
这套工具类库将常用功能进行了封装,避免了重复编写代码,大大缩短了开发周期。开发者无需在每个项目中重新实现这些功能,直接调用工具类库中的方法即可,让开发工作更加高效快捷。
(二)降低出错率
经过多次测试和优化,工具类库中的代码稳定性和可靠性较高,减少了因重复编写代码可能出现的错误。而且,工具类库的统一管理也方便对代码进行维护和修复,降低了项目的维护成本。
(三)便于维护和扩展
如果某个功能需要修改或优化,只需在工具类库中修改一处,所有使用该功能的项目都会自动更新。同时,随着项目需求的不断变化,可以方便地在工具类库中添加新的功能,实现工具类库的持续扩展。
四、总结与展望
这套工具类库是我在开发过程中的经验积累和智慧结晶,它为解决开发中的常见问题提供了便捷的方案。在未来,我还计划进一步完善和扩展这个工具类库,比如增加网络请求封装、数据库操作封装等功能,使其能够更好地适应各种开发场景,为开发者提供更加强大的支持。希望这套工具类库也能为大家的开发工作带来便利,提高开发效率。如果大家在使用过程中有任何问题或建议,欢迎随时交流分享。
五、源码及动态库地址
Util源码:Github链接
Util 动态库下载:百度网盘下载 提取码: pe4u