跳到正文
Yayin Story Studio Yayin Story Studio 项目文档

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

此枚举用于表示文件操作的结果

ConstantValueDescription
Visindigo::Utility::FileOperation::Success0操作成功
Visindigo::Utility::FileOperation::FileNotFound1指定的文件不存在
Visindigo::Utility::FileOperation::DirNotFound2指定的目录不存在,或者所需的上级目录无法创建
Visindigo::Utility::FileOperation::NameConflict3目标已存在,且调用方没有要求覆盖它
Visindigo::Utility::FileOperation::PermissionDenied4没有访问该文件或目录的权限
Visindigo::Utility::FileOperation::DiskFull5写入失败,通常是磁盘空间不足导致的
Visindigo::Utility::FileOperation::UnknownError6无法进一步判定的错误

这个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 开始支持。