QFile Class
QFile 类提供了一个用于从文件读取和向文件写入数据的接口。更多内容...
| 头文件: | #include <QFile> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 继承自: | QFileDevice |
| 被继承者: |
- 所有成员列表(包括继承的成员)
- QFile 属于“输入/输出与网络”模块。
注意:该类中的所有函数均为可重入的。
公共函数
| QFile() | |
| QFile(QObject *parent) | |
| QFile(const QString &name) | |
(since 6.0) | QFile(const std::filesystem::path &name) |
| QFile(const QString &name, QObject *parent) | |
(since 6.0) | QFile(const std::filesystem::path &name, QObject *parent) |
| virtual | ~QFile() |
| bool | copy(const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt) |
(since 6.0) bool | copy(const std::filesystem::path &newName) |
| bool | exists() const |
(since 6.0) std::filesystem::path | filesystemFileName() const |
(since 6.3) std::filesystem::path | filesystemSymLinkTarget() const |
| bool | link(const QString &linkName) |
(since 6.0) bool | link(const std::filesystem::path &newName) |
| bool | moveToTrash() |
(since 6.3) bool | open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions) |
| bool | open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle) |
| bool | open(int fd, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle) |
| bool | remove() |
| bool | rename(const QString &newName) |
(since 6.0) bool | rename(const std::filesystem::path &newName) |
| void | setFileName(const QString &name) |
(since 6.0) void | setFileName(const std::filesystem::path &name) |
| QString | symLinkTarget() const |
重新实现的公共函数
| virtual QString | fileName() const override |
| virtual bool | open(QIODeviceBase::OpenMode mode) override |
| virtual QFileDevice::Permissions | permissions() const override |
| virtual bool | resize(qint64 sz) override |
| virtual bool | setPermissions(QFileDevice::Permissions permissions) override |
| virtual qint64 | size() const override |
静态公共成员
| bool | copy(const QString &fileName, const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt) |
| QString | decodeName(const QByteArray &localFileName) |
| QString | decodeName(const char *localFileName) |
| QByteArray | encodeName(const QString &fileName) |
| bool | exists(const QString &fileName) |
(since 6.3) std::filesystem::path | filesystemSymLinkTarget(const std::filesystem::path &fileName) |
| bool | link(const QString &fileName, const QString &linkName) |
| bool | moveToTrash(const QString &fileName, QString *pathInTrash = nullptr) |
| QFileDevice::Permissions | permissions(const QString &fileName) |
(since 6.0) QFileDevice::Permissions | permissions(const std::filesystem::path &filename) |
| bool | remove(const QString &fileName) |
| bool | rename(const QString &oldName, const QString &newName) |
| bool | resize(const QString &fileName, qint64 sz) |
| bool | setPermissions(const QString &fileName, QFileDevice::Permissions permissions) |
(since 6.0) bool | setPermissions(const std::filesystem::path &filename, QFileDevice::Permissions permissionSpec) |
(since 6.9) bool | supportsMoveToTrash() |
| QString | symLinkTarget(const QString &fileName) |
详细说明
QFile 是一个用于读写文本和二进制文件及资源的 I/O 设备。QFile 可以单独使用,但更方便的做法是与QTextStream 或QDataStream 配合使用。
文件名通常在构造函数中传入,但也可以随时使用setFileName() 进行设置。无论操作系统如何,QFile 均期望文件分隔符为 '/'。不支持使用其他分隔符(例如 '\')。
您可以使用exists() 检查文件是否存在,并使用remove() 删除文件。(QFileInfo 和QDir 提供了更多与文件系统相关的进阶操作。)
文件通过open() 打开,通过close() 关闭,并通过flush() 刷新。 数据通常使用QDataStream 或QTextStream 进行读写,但您也可以调用从QIODevice 继承的函数read()、readLine()、readAll()、write()。QFile 还继承了getChar()、putChar()、ungetChar(),这些函数按字符逐个处理。
文件大小可通过size() 获取。您可以使用pos() 获取当前文件位置,或使用seek() 移动到新的文件位置。如果已到达文件末尾,atEnd() 将返回true 。
直接读取文件
以下示例按行读取文本文件:
QFile file("in.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
while (!file.atEnd()) {
QByteArray line = file.readLine();
process_line(line);
}传递给 `open()` 的 `Text ` 标志指示 Qt 将 Windows 风格的行结束符(“\r\n ”)转换为 C++ 风格的行结束符(“\n ”)。默认情况下,`QFile` 默认处理二进制文件,即不对文件中存储的字节进行任何转换。
使用流读取文件
下一个示例使用QTextStream 逐行读取文本文件:
QFile file("in.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
process_line(line);
}QTextStream 负责将磁盘上存储的8位数据转换为16位UnicodeQString 。默认情况下,它假定文件采用UTF-8编码。可通过调用QTextStream::setEncoding()来更改此设置。
要写入文本,我们可以使用运算符 <<(),该运算符已被重载,左侧接受QTextStream ,右侧接受各种数据类型(包括QString ):
QFile file("out.txt");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
QTextStream out(&file);
out << "The magic number is: " << 49 << "\n";QDataStream 其工作原理类似,即可以使用 operator<<() 写入数据,并使用 operator>>() 将其读回。详情请参阅类文档。
信号
与其他QIODevice 实现(例如QTcpSocket )不同,QFile不会发出aboutToClose()、bytesWritten()或readyRead()信号。这一实现细节意味着QFile不适用于读写某些类型的文件,例如Unix平台上的设备文件。
平台特定问题
与 I/O 相关的 Qt API使用基于 UTF-16 的 QString 来表示文件路径。然而,标准 C++ API(<cstdio> 或<iostream> )或特定于平台的 API 通常需要 8 位编码的路径。您可以使用encodeName() 和decodeName() 在这两种表示形式之间进行转换。
在 Unix 系统上,某些特殊系统文件(例如位于/proc 中的文件)会使size() 始终返回 0,但您仍可能从该文件中读取更多数据;这些数据是作为您调用read() 的直接响应而生成的。 但在这种情况下,你无法使用atEnd() 来判断是否还有更多数据可读(因为对于声称大小为 0 的文件,atEnd() 会返回 true)。相反,你应该调用readAll(),或者反复调用read() 或readLine(),直到无法再读取任何数据为止。下面的示例使用QTextStream 逐行读取/proc/modules :
QFile file("/proc/modules");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
QString line = in.readLine();
while (!line.isNull()) {
process_line(line);
line = in.readLine();
}在 Android 平台上,处理内容 URI 时存在一些限制:
- 可能需要通过QFileDialog (该组件实现了Android的原生文件选择器)向用户提示以获取访问权限。
- 请尽量遵循“范围存储”指南,例如使用应用专属目录而非其他公共外部目录。有关更多信息,请参阅存储最佳实践。
- 由于 Qt API(例如 QFile)的设计限制,无法将这些 API 与 Android 的MediaStoreAPI 完全集成。
安全注意事项
Windows 路径规范化
处理文件和目录路径的 Qt API 在规范化和规范化处理方面与原生 Windows API 有所不同:
- 不会去除末尾的点和/或空格。
- 不会展开8.3 短名称。
\\?\和\\?\UNC\前缀始终会被舍弃。
这些差异使得绕过基于字符串比较或模式匹配的安全检查成为可能。例如,下面的代码在两次比较中都会返回false ,但将此路径传递给 QFile 时,却能成功在Program Files 中打开myapp.exe 。
constQString path=u"C:\\PROGRA~1\\MyApp\\myapp.exe."_s;// 注意末尾的点
QFileInfo fi(path);
qDebug() << fi.canonicalFilePath().contains("Program Files"_L1); // false
qDebug() << (fi.suffix() == "exe"_L1); // false
QFile f(path);
f.open(QIODevice::WriteOnly);// true文件权限
Unix类系统和Windows系统对文件权限的处理方式不同。在Unix类系统的非writable 目录中,无法创建文件。但在Windows系统中情况并非总是如此,例如,“我的文档”目录通常不可写,但仍然可以在其中创建文件。
Qt XML 对文件权限的处理能力有限,这尤其会影响 `QFile::setPermissions()` 函数。在 Windows 上,Qt XML 只会设置传统的只读标志,且仅在未传入任何 `Write*` 标志时才会设置。 Qt 不处理访问控制列表(ACL),这使得该函数在 NTFS 分区上基本毫无用处。但对于使用 VFAT 文件系统的 USB 闪存盘,它可能仍有用处。POSIX ACL 同样不会被处理。
另请参阅 QTextStream 、QDataStream 、QFileInfo 、QDir 以及《Qt 资源系统》。
成员函数文档
QFile::QFile()
创建一个 QFile 对象。
[explicit] QFile::QFile(QObject *parent)
使用给定的parent 创建一个新的文件对象。
[explicit] QFile::QFile(const QString &name)
创建一个新的文件对象,用于表示具有给定name 的文件。
注意:在 Qt 6.8 及更早版本中 ,出于向后兼容性考虑,此构造函数是隐式的。从 Qt 6.9 开始,此构造函数无条件地为explicit 。用户可以通过在包含任何 Qt 头文件之前定义QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH 宏,即使在较早版本的 Qt 中,也能强制将此构造函数设为explicit 。
[explicit, since 6.0] QFile::QFile(const std::filesystem::path &name)
创建一个新的文件对象,用于表示指定文件name 。
注意:在 Qt 6.8 及更早版本中 ,出于向后兼容性考虑,此构造函数是隐式的。从 Qt 6.9 开始,此构造函数无条件地为 `explicit`。用户可以通过在包含任何 Qt 头文件之前定义 `QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH ` 宏,即使在较早版本的 Qt 中,也能强制将此构造函数设为 `explicit `。
该函数于 Qt 6.0 中引入。
QFile::QFile(const QString &name, QObject *parent)
使用给定的parent 创建一个新的文件对象,以表示具有指定name 的文件。
[since 6.0] QFile::QFile(const std::filesystem::path &name, QObject *parent)
使用给定的parent 构建一个新的文件对象,以表示具有指定name 的文件。
该函数在 Qt 6.0 中引入。
[virtual noexcept] QFile::~QFile()
销毁文件对象,并在必要时将其关闭。
bool QFile::copy(const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)
将名为fileName()的文件复制到newName 。
该文件在复制前会被关闭。
自 Qt 6.12 起,调用时可以指定权限perm 。若未传入该参数,则复制源文件的权限。新文件将按给定的权限创建。
如果复制的文件是一个符号链接(symlink),则复制的是它所指向的文件,而不是链接本身。除权限外,其他文件元数据均不被复制。
若操作成功,返回true ;否则返回false 。
请注意,如果已存在名为newName 的文件,copy() 将返回false 。这意味着QFile 不会覆盖该文件。但是,此操作并非原子操作。在检查与复制之间,可能有其他进程创建了名为newName 的文件。在这种情况下,该文件将被覆盖。
注意:在 Android系统上 ,该操作目前尚不支持content 方案的 URI。
另请参阅 setFileName()。
[since 6.0] bool QFile::copy(const std::filesystem::path &newName)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
[static] bool QFile::copy(const QString &fileName, const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)
将名为fileName 的文件复制到newName 。
自 Qt 6.12 起,调用时可以指定权限perm 。若未传入该参数,则复制源文件的权限。新文件将按给定的权限创建。
如果被复制的文件是符号链接(symlink),则复制的是它所指向的文件,而不是链接本身。除权限外,其他文件元数据均不会被复制。
若操作成功,则返回true ;否则返回false 。
请注意,如果已存在名为newName 的文件,copy() 将返回false 。这意味着QFile 不会覆盖该文件。但是,此操作并非原子操作。在检查与复制之间,存在其他进程创建名为newName 的文件的可能性。在这种情况下,该文件将被覆盖。
注意:在 Android平台上 ,目前尚不支持针对content 方案 URI 的此操作。
这是一个重载函数。
另请参阅 rename()。
[static] QString QFile::decodeName(const QByteArray &localFileName)
这通过localFileName 实现了与QFile::encodeName() 相反的功能。
另请参阅 encodeName()。
[static] QString QFile::decodeName(const char *localFileName)
返回给定localFileName 的Unicode版本。详情请参阅encodeName()。
这是一个重载函数。
[static] QByteArray QFile::encodeName(const QString &fileName)
将fileName 转换为可在本机API中使用的8位编码。在Windows系统上,该编码采用当前活动的Windows(ANSI)代码页;在其他平台上,则采用UTF-8编码,而在macOS系统上则采用分解形式(NFD)。
另请参阅 decodeName()。
[static] bool QFile::exists(const QString &fileName)
如果由 `fileName ` 指定的文件存在,则返回 `true `;否则返回 `false`。
注意:如果 fileName 是一个指向不存在的文件的符号链接,则返回 false。
bool QFile::exists() const
如果由fileName()指定的文件存在,则返回true ;否则返回false 。
这是一个重载函数。
另请参阅 fileName() 和setFileName()。
[override virtual] QString QFile::fileName() const
重写了:QFileDevice::fileName() const。
返回由setFileName()、rename() 或QFile 构造函数设置的文件名。
另请参阅 setFileName()、rename(),以及QFileInfo::fileName()。
[since 6.0] std::filesystem::path QFile::filesystemFileName() const
返回fileName(),其值为std::filesystem::path 。
该函数在 Qt 6.0 中引入。
[since 6.3] std::filesystem::path QFile::filesystemSymLinkTarget() const
返回symLinkTarget(),其值为std::filesystem::path 。
该函数于 Qt 6.3 版本中引入。
[static, since 6.3] std::filesystem::path QFile::filesystemSymLinkTarget(const std::filesystem::path &fileName)
返回symLinkTarget() 作为fileName 的std::filesystem::path 。
该函数于 Qt 6.3 中引入。
bool QFile::link(const QString &linkName)
创建一个名为linkName 的链接,该链接指向当前由fileName()指定的文件。链接的具体形式取决于底层文件系统(在Windows上可能是快捷方式,在Unix上可能是符号链接)。若操作成功,则返回true ;否则返回false 。
该函数不会覆盖文件系统中已存在的实体;在此情况下,link() 将返回false,并设置error()返回RenameError 。
注意:要在 Windows 上创建有效的链接,linkName 必须具有.lnk 文件扩展名。
另请参阅 setFileName()。
[since 6.0] bool QFile::link(const std::filesystem::path &newName)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
[static] bool QFile::link(const QString &fileName, const QString &linkName)
创建一个名为linkName 的链接,该链接指向文件fileName 。链接的具体形式取决于底层文件系统(在 Windows 上可能是快捷方式,在 Unix 上可能是符号链接)。如果操作成功,则返回true ;否则返回false 。
这是一个重载函数。
另请参阅 link()。
bool QFile::moveToTrash()
将由fileName()指定的文件移至垃圾桶。若操作成功,则返回true ,并将fileName()设置为该文件在垃圾桶中的路径;否则返回false 。
此函数的执行时间与被移入垃圾桶的文件大小无关。如果对目录调用此函数,其执行时间可能与被移入垃圾桶的文件数量成正比。如果当前的fileName()指向一个符号链接,此函数将把该链接移入垃圾桶(这可能会导致链接失效),而非其目标文件。
在 Windows 和 macOS 操作系统上,本函数使用相应的 API 执行文件移入回收站操作。在其他系统(Unix 系统)上,本函数遵循FreeDesktop.org 回收站规范 1.0 版。
注意:当 使用 FreeDesktop.org 垃圾桶实现时 ,如果无法通过文件重命名和硬链接将文件移动到垃圾桶位置,此函数将失败。 如果待移入垃圾桶的文件位于当前用户无权在该卷(挂载点)上创建.Trash 目录的卷上,或者遇到某些特殊文件系统类型或配置(例如本身并非挂载点的子卷),则会出现这种情况。
注意:在 系统 API 不报告回收站中文件位置的系统上 ,一旦文件被移动,fileName() 将被设置为空字符串。在没有回收站的系统上,该函数始终返回false (参见supportsMoveToTrash())。
另请参阅 supportsMoveToTrash()、remove() 和QDir::remove()。
[static] bool QFile::moveToTrash(const QString &fileName, QString *pathInTrash = nullptr)
将fileName 指定的文件移至废纸篓。若操作成功,则返回true ,并将pathInTrash (若已提供)设置为该文件在废纸篓中的路径;否则返回false 。
此函数的执行时间与被移入垃圾桶的文件大小无关。若对目录调用此函数,其执行时间可能与被移入垃圾桶的文件数量成正比。如果当前的fileName() 指向一个符号链接,此函数将把该链接移入垃圾桶(这可能会导致链接失效),而非其链接目标。
在 Windows 和 macOS 操作系统上,该函数使用相应的 API 执行文件移入回收站操作。在其他系统(Unix 系统)上,该函数遵循FreeDesktop.org 回收站规范 1.0 版。
注意:当 使用 FreeDesktop.org 垃圾桶实现时 ,如果该函数无法通过文件重命名和硬链接将文件移动到垃圾桶位置,则会失败。 这种情况通常发生在:待移入垃圾桶的文件位于当前用户无权在该卷(挂载点)上创建.Trash 目录的卷上,或者遇到某些特殊文件系统类型或配置(例如本身并非挂载点的子卷)时。
注意:在 系统 API 不报告回收站中文件路径的系统上 ,文件移动完成后,pathInTrash 将被设置为空字符串。在没有回收站的系统上,此函数始终返回 false。
这是一个重载函数。
[override virtual] bool QFile::open(QIODeviceBase::OpenMode mode)
重写了:QIODevice::open (QIODeviceBase::OpenMode 模式)。
使用mode 标志打开文件,若成功则返回true ;否则返回false 。
mode 的标志必须包含QIODeviceBase::ReadOnly 、WriteOnly 或ReadWrite 。此外还可以包含其他标志,例如Text 和Unbuffered 。
注意:在 WriteOnly 或ReadWrite 模式下,如果相关文件尚不存在,该函数会在打开文件之前尝试创建一个新文件。在 POSIX 系统上,该文件将以 0666 模式创建(该模式受 umask 影响);在 Windows 系统上,该文件将继承父目录的权限。 在 Android 系统上,预计用户应具备对文件名所在父目录的访问权限,否则将无法创建该不存在的文件。
另请参阅 QT_USE_NODISCARD_FILE_OPEN 和setFileName()。
[since 6.3] bool QFile::open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)
如果文件不存在,且mode 表示需要创建该文件,则会使用指定的permissions 创建该文件。
在 POSIX 系统上,实际权限受umask 值的影响。
在 Windows 上,权限是通过访问控制列表 (ACL) 模拟的。当组被授予的权限少于“其他人”时,这些 ACL 的顺序可能不符合标准。具有此类权限的文件和目录在打开“属性”对话框的“安全”选项卡时会生成警告。向组授予与“其他人”相同的全部权限可避免此类警告。
这是一个重载函数。
该函数在 Qt 6.3 中引入。
另请参阅 QIODevice::OpenMode 、setFileName() 以及QT_USE_NODISCARD_FILE_OPEN 。
bool QFile::open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
在指定的mode 中打开现有文件句柄fh 。可使用handleFlags 指定其他选项。若操作成功,则返回true ;否则返回false 。
示例:
#include <stdio.h>
void printError(const char* msg)
{
QFile file;
file.open(stderr, QIODevice::WriteOnly);
file.write(msg, qstrlen(msg)); // write to stderr
file.close();
}当使用此函数打开QFile 时,close()的行为由AutoCloseHandle标志控制。如果指定了AutoCloseHandle,且此函数执行成功,则调用close()将关闭该已接收的句柄。否则,close()实际上不会关闭文件,仅对其进行刷新。
警告:
- 如果fh 不指向普通文件(例如,它是
stdin、stdout或stderr),则可能无法调用seek()。在这些情况下,size()将返回0。有关更多信息,请参阅QIODevice::isSequential()。 - 由于该函数在未指定文件名的情况下打开文件,因此无法将此QFile 与QFileInfo 配合使用。
Windows 平台注意事项
fh 在访问文件和其他随机访问设备时,必须以二进制模式打开(即模式字符串必须包含 'b',如 "rb" 或 "wb")。 如果您将 QIODevice::Text 传递给mode ,Qt 会转换行尾字符。顺序设备(如 stdin 和 stdout)不受此限制的影响。
若要在控制台使用 stdin、stdout 和 stderr 流,您需要启用对控制台应用程序的支持。为此,请在应用程序的项目文件中添加以下声明:
CONFIG += console这是一个重载函数。
另请参阅 close() 和QT_USE_NODISCARD_FILE_OPEN 。
bool QFile::open(int fd, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
在指定的mode 中打开现有的文件描述符fd 。可使用handleFlags 指定其他选项。若操作成功,则返回true ;否则返回false 。
当使用此函数打开QFile 时,close() 的行为由 AutoCloseHandle 标志控制。如果指定了 AutoCloseHandle,且此函数执行成功,则调用close() 将关闭该已采用的句柄。否则,close() 实际上不会关闭文件,而只是刷新文件。
警告:如果 fd 不是普通文件(例如,它是0(stdin )、1(stdout )或2(stderr )),则可能无法调用seek()。在这些情况下,size()将返回0 。有关更多信息,请参阅QIODevice::isSequential()。
这是一个重载函数。
另请参阅 close() 和QT_USE_NODISCARD_FILE_OPEN 。
[override virtual] QFileDevice::Permissions QFile::permissions() const
重新实现了:QFileDevice::permissions() const。
另请参见 setPermissions()。
[static] QFileDevice::Permissions QFile::permissions(const QString &fileName)
返回fileName 的QFile::Permission的完整“或”运算组合。
这是一个重载函数。
[static, since 6.0] QFileDevice::Permissions QFile::permissions(const std::filesystem::path &filename)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
bool QFile::remove()
删除由fileName() 指定的文件。
如果文件已成功删除,则返回true ;否则返回false 。
如果文件处于打开状态,则会在删除前将其关闭。
另请参阅 setFileName()。
[static] bool QFile::remove(const QString &fileName)
删除由fileName 指定的文件。
如果文件已成功删除,则返回true ;否则返回false 。
这是一个重载函数。
另请参阅 remove()。
bool QFile::rename(const QString &newName)
将当前由 `fileName()` 指定的文件重命名为 `newName`。若操作成功,则返回 `true `;否则返回 `false`。
如果已存在名为newName 的文件,rename() 将返回false (即QFile 不会覆盖该文件)。
文件在重命名之前会被关闭。
如果重命名操作失败,Qt 将尝试将该文件的内容复制到newName ,然后删除该文件,仅保留newName 。如果复制操作失败或无法删除该文件,则会删除目标文件newName 以恢复旧状态。
另请参阅 setFileName()。
[since 6.0] bool QFile::rename(const std::filesystem::path &newName)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
[static] bool QFile::rename(const QString &oldName, const QString &newName)
将文件oldName 重命名为newName 。成功时返回true ;否则返回false 。
如果已经存在名为newName 的文件,rename() 将返回false (即QFile 不会覆盖该文件)。
这是一个重载函数。
另请参阅 rename()。
[override virtual] bool QFile::resize(qint64 sz)
重新实现了:QFileDevice::resize (qint64 sz)。
[static] bool QFile::resize(const QString &fileName, qint64 sz)
将fileName 的大小(以字节为单位)设置为sz 。如果调整大小成功,则返回true ;否则返回false。如果sz 大于fileName 当前的大小,则新字节内容将被设为0;如果sz 小于 当前的大小,则文件将被直接截断。
警告: 如果文件不存在,此 函数可能会失败。
这是一个重载函数。
另请参阅 resize()。
void QFile::setFileName(const QString &name)
设置文件的name 。文件名可以不包含路径、包含相对路径或包含绝对路径。
如果文件已打开,请勿调用此函数。
如果文件名没有路径或为相对路径,则将使用调用open() 时应用程序的当前目录路径。
示例:
QFile file;
QDir::setCurrent("/tmp");
file.setFileName("readme.txt");
QDir::setCurrent("/home");
file.open(QIODevice::ReadOnly); // opens "/home/readme.txt" under Unix请注意,目录分隔符“/”适用于 Qt 支持的所有操作系统。
另请参见 fileName()、QFileInfo 以及QDir 。
[since 6.0] void QFile::setFileName(const std::filesystem::path &name)
这是一个重载函数。
该函数是在 Qt 6.0 中引入的。
[override virtual] bool QFile::setPermissions(QFileDevice::Permissions permissions)
重写了:QFileDevice::setPermissions (QFileDevice::Permissions 权限)。
将文件的权限设置为指定的permissions 。如果成功,则返回true ;如果无法修改权限,则返回false 。
警告:此 函数不处理访问控制列表(ACL),这可能会限制其有效性。
另请参阅 permissions() 和setFileName()。
[static] bool QFile::setPermissions(const QString &fileName, QFileDevice::Permissions permissions)
将fileName 文件的权限设置为permissions 。
这是一个重载函数。
[static, since 6.0] bool QFile::setPermissions(const std::filesystem::path &filename, QFileDevice::Permissions permissionSpec)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
[override virtual] qint64 QFile::size() const
重新实现了:QFileDevice::size() const。
[static, since 6.9] bool QFile::supportsMoveToTrash()
如果 Qt 支持在当前操作系统中使用moveToTrash() 函数将文件移至垃圾桶(回收站),则返回true ;否则返回false 。请注意,该函数返回true 并不意味着moveToTrash() 一定会成功。特别是,该函数不会检查用户是否已在设置中禁用了此功能。
该函数于 Qt 6.9 中引入。
另请参阅 moveToTrash()。
[static] QString QFile::symLinkTarget(const QString &fileName)
返回由fileName 指定的符号链接(或 Windows 中的快捷方式)所指向的文件或目录的绝对路径;如果fileName 不对应于符号链接,则返回空字符串。
该名称可能并不代表一个现有文件;它仅是一个字符串。如果符号链接指向一个现有文件,QFile::exists() 将返回true 。
QString QFile::symLinkTarget() const
返回符号链接(或 Windows 中的快捷方式)所指向的文件或目录的绝对路径;如果该对象不是符号链接,则返回一个空字符串。
该名称可能并不代表一个现有的文件;它仅仅是一个字符串。如果符号链接指向一个现有的文件,QFile::exists() 将返回true 。
这是一个重载函数。
另请参阅 fileName() 和setFileName()。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.