Visindigo::Utility::FileOperation Class
class Visindigo::Utility::FileOperation此类为Yayin Story Studio 提供带有错误码的文件操作的相关函数. 详情...
| 头文件: | #include <FileOperation> |
| 自以下版本: | Visindigo 0.17.0 |
公开类型
(自 Visindigo 0.17.0 引入) enum | ErrorCode { Success, FileNotFound, DirNotFound, NameConflict, PermissionDenied, …, UnknownError } |
静态公开成员
(自 Visindigo 0.17.0 引入) Visindigo::Utility::FileOperation::ErrorCode | copyDir(const QString &srcPath, const QString &dstPath, bool rinse = true, bool overwrite = false) |
(自 Visindigo 0.17.0 引入) Visindigo::Utility::FileOperation::ErrorCode | copyFile(const QString &srcPath, const QString &dstPath, bool rinse = true, bool overwrite = false) |
(自 Visindigo 0.17.0 引入) Visindigo::Utility::FileOperation::ErrorCode | deleteDir(const QString &dirPath, bool moveToTrash = true) |
(自 Visindigo 0.17.0 引入) Visindigo::Utility::FileOperation::ErrorCode | deleteFile(const QString &filePath, bool moveToTrash = true) |
(自 Visindigo 0.17.0 引入) QString | errorCodeName(Visindigo::Utility::FileOperation::ErrorCode code) |
(自 Visindigo 0.17.0 引入) Visindigo::Utility::FileOperation::ErrorCode | moveDir(const QString &srcPath, const QString &dstPath, bool rinse = true, bool overwrite = false) |
(自 Visindigo 0.17.0 引入) Visindigo::Utility::FileOperation::ErrorCode | moveFile(const QString &srcPath, const QString &dstPath, bool rinse = true, bool overwrite = false) |
(自 Visindigo 0.17.0 引入) int | readAll(const QString &filePath) |
(自 Visindigo 0.17.0 引入) int | readBinary(const QString &filePath) |
(自 Visindigo 0.17.0 引入) int | readLines(const QString &filePath) |
(自 Visindigo 0.17.0 引入) Visindigo::Utility::FileOperation::ErrorCode | saveAll(const QString &filePath, const QString &data) |
(自 Visindigo 0.17.0 引入) Visindigo::Utility::FileOperation::ErrorCode | saveBinary(const QString &filePath, const QByteArray &data) |
(自 Visindigo 0.17.0 引入) Visindigo::Utility::FileOperation::ErrorCode | saveLines(const QString &filePath, const QStringList &lines, const QString &joinLine = "\n") |
详细说明
这类所有函数都是静态函数,所以你不需要创建它的实例。
与 Visindigo::Utility::FileUtility 不同,这里的所有函数都不会自行吞掉错误: 读取类的函数返回 Errorable(即 std::expected),写入和删除类的函数返回 ErrorCode, 调用方可以据此决定是记录日志、重试还是回退。FileUtility 中对应的旧函数自0.17.0起已废弃, 它们只是转发到这里并保持旧有的容错行为。
成员类型文档
[since Visindigo 0.17.0] enum FileOperation::ErrorCode
此枚举用于表示文件操作的结果
| Constant | Value | Description |
|---|---|---|
Visindigo::Utility::FileOperation::Success | 0 | 操作成功 |
Visindigo::Utility::FileOperation::FileNotFound | 1 | 指定的文件不存在 |
Visindigo::Utility::FileOperation::DirNotFound | 2 | 指定的目录不存在,或者所需的上级目录无法创建 |
Visindigo::Utility::FileOperation::NameConflict | 3 | 目标已存在,且调用方没有要求覆盖它 |
Visindigo::Utility::FileOperation::PermissionDenied | 4 | 没有访问该文件或目录的权限 |
Visindigo::Utility::FileOperation::DiskFull | 5 | 写入失败,通常是磁盘空间不足导致的 |
Visindigo::Utility::FileOperation::UnknownError | 6 | 无法进一步判定的错误 |
这个enum 从 Visindigo 0.17.0 开始支持。
成员函数文档
[static, since Visindigo 0.17.0] Visindigo::Utility::FileOperation::ErrorCode FileOperation::copyDir(const QString &srcPath, const QString &dstPath, bool rinse = true, bool overwrite = false)
srcPath 源目录路径 dstPath 目标目录路径 rinse 是否使用漂洗的方式复制文件 overwrite 是否覆盖已存在的目标文件
复制整个目录。此函数会遍历源目录中的所有文件,并对每个文件调用copyFile()。
return 操作结果。如果源目录不存在则返回DirNotFound,否则返回第一个出错文件的错误码, 但在出错后仍会继续尝试复制剩余的文件,因此这个函数可能造成部分复制的结果。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] Visindigo::Utility::FileOperation::ErrorCode FileOperation::copyFile(const QString &srcPath, const QString &dstPath, bool rinse = true, bool overwrite = false)
srcPath 源文件路径 dstPath 目标文件路径 rinse 是否使用漂洗的方式复制文件 overwrite 是否覆盖已存在的目标文件
复制文件。如果rinse为true,则使用漂洗的方式复制文件,否则使用QFile::copy(), 如果overwrite为true,则覆盖已存在的目标文件,否则不进行复制。
漂洗模式只忠实传递文件本体的二进制数据,不从源文件读取任何元数据,也不写入任何元数据到目标文件, 因此在某些特殊情况下可能会得到一个与源文件不同的目标文件,例如当源文件具有特殊权限时,目标文件可能会得到默认权限; 当源文件具有特殊属性时,目标文件可能不会继承这些属性;当源文件具有特殊时间戳时,目标文件可能会得到当前时间戳。
这对于从qrc编译到二进制文件内的资源文件向外部复制时很有用,因为qrc资源文件会自动设为只读, 并且具有特殊的权限和属性,使用漂洗模式复制可以得到一个正常的可读写文件。
return 操作结果。如果源文件不存在则返回FileNotFound,如果目标已存在且overwrite为false则返回NameConflict, 其余失败返回对应的ErrorCode。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] Visindigo::Utility::FileOperation::ErrorCode FileOperation::deleteDir(const QString &dirPath, bool moveToTrash = true)
dirPath 目录路径 moveToTrash 是否移动到回收站
删除指定目录及其所有内容。如果moveToTrash为true,则把整个目录移动到回收站,否则直接递归删除。
return 操作结果。如果目录不存在则返回DirNotFound,其余失败返回对应的ErrorCode。
Warning: 当moveToTrash为true时,是否支持把整个目录移动到回收站取决于平台, 在不支持的平台上会返回UnknownError,此时调用方需要自行决定是否改用直接删除。
Note: 直接删除时会递归删除目录中的所有文件和子目录,请谨慎使用。
Note: 此函数没有 Visindigo::Utility::FileUtility::deleteDir 的exclude参数, 需要保留部分内容的调用方请继续使用 FileUtility 中的版本。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] Visindigo::Utility::FileOperation::ErrorCode FileOperation::deleteFile(const QString &filePath, bool moveToTrash = true)
filePath 文件路径 moveToTrash 是否移动到回收站
删除指定文件。如果moveToTrash为true,则把文件移动到回收站,否则直接删除。
return 操作结果。如果文件不存在则返回FileNotFound, 如果删除失败则返回对应的ErrorCode。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] QString FileOperation::errorCodeName(Visindigo::Utility::FileOperation::ErrorCode code)
code 错误码
return 错误码的名字,主要用于日志输出。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] Visindigo::Utility::FileOperation::ErrorCode FileOperation::moveDir(const QString &srcPath, const QString &dstPath, bool rinse = true, bool overwrite = false)
srcPath 源目录路径 dstPath 目标目录路径 rinse 是否使用漂洗的方式移动文件 overwrite 是否覆盖已存在的目标文件
移动整个目录。此函数会遍历源目录中的所有文件,并对每个文件调用moveFile()。 只有当所有文件都移动成功时,才会删除此时已经为空的源目录结构。
return 操作结果。如果源目录不存在则返回DirNotFound,否则返回第一个出错文件的错误码, 但在出错后仍会继续尝试移动剩余的文件,因此这个函数可能造成部分移动的结果。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] Visindigo::Utility::FileOperation::ErrorCode FileOperation::moveFile(const QString &srcPath, const QString &dstPath, bool rinse = true, bool overwrite = false)
srcPath 源文件路径 dstPath 目标文件路径 rinse 是否使用漂洗的方式移动文件 overwrite 是否覆盖已存在的目标文件
移动文件。当rinse为false时,使用QFile::rename()直接重命名移动;当rinse为true时, 先漂洗复制再删除源文件,适用于跨卷移动或需要剥离元数据的场景。
return 操作结果。如果源文件不存在则返回FileNotFound,如果目标已存在且overwrite为false则返回NameConflict, 如果目标路径的上级目录不存在则返回DirNotFound,其余失败返回对应的ErrorCode。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] int FileOperation::readAll(const QString &filePath)
filePath 文件路径
return 文件的全部文本内容,如果文件不存在则返回FileNotFound, 如果文件无法打开或者在读取过程中出错,则返回对应的ErrorCode。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] int FileOperation::readBinary(const QString &filePath)
filePath 文件路径
return 文件的全部二进制内容,如果文件不存在则返回FileNotFound, 如果文件无法打开或者在读取过程中出错,则返回对应的ErrorCode。
Note: 与 readAll 不同,这个函数不进行任何编码和换行符转换。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] int FileOperation::readLines(const QString &filePath)
filePath 文件路径
return 以行列表的形式读取文件的内容,如果文件不存在则返回FileNotFound, 如果文件无法打开或者在读取过程中出错,则返回对应的ErrorCode。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] Visindigo::Utility::FileOperation::ErrorCode FileOperation::saveAll(const QString &filePath, const QString &data)
filePath 文件路径 data 需要保存的文本数据
将QString保存到文件中。如果目标文件不存在,则连同其上级目录一起创建。
return 操作结果。如果上级目录无法创建则返回DirNotFound, 如果文件无法写入则返回对应的ErrorCode。
Note: 这个函数无法感知对象的析构,因此保存是即时完成的,不会进行延迟写入。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] Visindigo::Utility::FileOperation::ErrorCode FileOperation::saveBinary(const QString &filePath, const QByteArray &data)
filePath 文件路径 data 需要保存的二进制数据
将QByteArray保存到文件中。如果目标文件不存在,则连同其上级目录一起创建。
return 操作结果。如果上级目录无法创建则返回DirNotFound, 如果文件无法写入则返回对应的ErrorCode。
Note: 与 saveAll 不同,这个函数不进行任何编码和换行符转换。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] Visindigo::Utility::FileOperation::ErrorCode FileOperation::saveLines(const QString &filePath, const QStringList &lines, const QString &joinLine = "\n")
filePath 文件路径 lines 需要保存的行列表 joinLine 行连接符
将QStringList保存到文件中,行与行之间用joinLine连接。 如果目标文件不存在,则连同其上级目录一起创建。
return 操作结果。如果上级目录无法创建则返回DirNotFound, 如果文件无法写入则返回对应的ErrorCode。
这个function 从 Visindigo 0.17.0 开始支持。