yhkylin-backup-tools/common/utils.h

174 lines
4.9 KiB
C++
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef UTILS_H
#define UTILS_H
#include <QString>
#include <QtDebug>
#include "mydefine.h"
/**
* @brief 工具类
* @author zhaominyong
* @since 2021/07/22
*/
class Utils
{
public:
/**
* @brief initSysRootPath, 根据应用程序路径推断系统根目录
* @param qsAppPath应用程序所在路径
*/
static void initSysRootPath(const QString& qsAppPath);
/**
* @brief getSysRootPath获取正式系统根目录
* @return const QString&,系统根目录
* @note
* 调用此函数前需要调用初始化系统根目录函数initSysRootPath否则返回默认目录“/”
*/
static const QString& getSysRootPath() { return m_sysRootPath; }
/**
* @brief customMessageHandler日志重定向句柄
* @param type 日志类型debug等
* @param context 上下文
* @param msg 日志信息
*/
static void customMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg);
/**
* @brief 文件锁,锁定应用程序
* @param frontUid锁定程序的用户id
* @return 锁文件的句柄
*/
static int lockProgram(int frontUid);
/**
* @brief 解除应用程序文件锁
* @param lock_file_fd 锁文件的文件描述符
* @return 0解除成功1解除失败
*/
static int unLockProgram(int lock_file_fd);
/**
* @brief 删除锁文件
* @return bool
*/
static bool rmLockFile();
/**
* @brief 检查/etc/.bootinfo是否存在并可读里面存放备份分区的UUID等信息
* @return bool
*/
static bool checkBootInfoExists();
/**
* @brief 获取备份分区的UUID
* @return 备份分区的UUID
*/
static QString getBackupPartitionUuid();
/**
* @brief 路径不存在则创建,不支持递归创建
* @param path
*/
static void mkdir(const QString& path);
/**
* @brief 创建路径,支持递归创建
* @param path
* @return bool
*/
static bool mkpath(const QString& path);
/**
* @brief 备份还原时,需要排除绑定挂载的路径,因为数据不是存放在挂载路径内
* @param excludes存放需要排除的绑定路径
*/
static void excludeFstabBindPath(QStringList &excludes);
/**
* @brief 生成rsync --exclude-from排除路径规则文件
* @return
*/
static bool generateExcludePathsFile();
/**
* @brief 获取系统备份还原排除路径列表
* @return 系统备份还原排除路径列表
*/
static QStringList getFromExcludePathsFile();
/**
* @brief 判断目录是否存在
* @param 目录路径
* @return true,存在false,不存在
*/
static bool isDirExist(const QString& fullDirName);
/**
* @brief 生成Uuid
* @return UUID
*/
static QString createUuid();
/**
* @brief 将列表中内容写入指定文件中
* @param fileName文件全路径
* @param lines内容列表
* @return true成功写入false写入失败
*/
static bool writeFileByLines(const QString& fileName, const QStringList& lines);
/**
* @brief 判断文件是否存在
* @param fileName 文件明
* @return booltrue-存在false-不存在
* @author zhaominyong
* @since 2021/05/29
*/
static bool filsExists(const QString &fileName);
/**
* @brief 记录备份日志
* @param line日志内容
* @return bool, true-成功false-失败
* @author zhaominyong
* @since 2021/05/29
* @note
* 因为系统恢复成功后马上需要reboot但是此时的文件缓存可能还未能落盘故此增加此函数其中调用了系统函数fdatasync确保缓存落盘
*/
static bool writeBackupLog(QString line);
/**
* @brief 立即写文件
* @param fileName 文件名,包含路径
* @param content 文件内容
* @return bool
*/
static bool syncWriteFile(const QString &fileName, const QString& content);
/**
* @brief 将字节大小转换为GB等表示的字符串
* @param sizeqint64空间大小单位字节
* @return GB/MB/KB等表示的字符串型大小
*/
static QString StringBySize(qint64 size);
/**
* @brief 获取挂接的移动设备列表
* @return MOUNTPOINT,PATH键值对列表(path中如果含有空格时显示不对建议不用此值)
* @author zhaominyong
* @since 2021/06/07
* @note
* for bug 59636 【cpm】【HUAWEI】【KOS】【L0】【V3试制】备份时选择移动设备会出现一个dev/sdc的路径(一般+必现+不常用功能)
* QStorageInfo::mountedVolumes获取的磁盘列表区分不出来是否移动设备
*/
static QHash<QString, QString> getRemovableStorages();
private:
// 系统根目录,默认"/"
static QString m_sysRootPath;
};
#endif // UTILS_H