Qt翻译相关类之QFile类

QFile 类

一个QFile类提供一个接口,用于读取和写入文件。更多...

Header:#include <QFile>
qmake:QT += core
Inherits:QFileDevice
Inherited By:

QTemporaryFile

注意:此类中的所有函数都是可重入的

公共类别

typedefDecoderFn

公共函数

 QFile(const QString &name, QObject *parent)
 QFile(QObject *parent)
 QFile(const QString &name)
 QFile()
virtual~QFile()
boolcopy(const QString &newName)
boolexists() const
boollink(const QString &linkName)
boolopen(FILE *fh, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
boolopen(int fd, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
boolremove()
boolrename(const QString &newName)
voidsetFileName(const QString &name)
QStringsymLinkTarget() const

虚拟成员函数

virtual QStringfileName() const override
virtual boolopen(QIODevice::OpenMode mode) override
virtual QFileDevice::Permissionspermissions() const override
virtual boolresize(qint64 sz) override
virtual boolsetPermissions(QFileDevice::Permissions permissions) override
virtual qint64size() const override

静态公共成员

boolcopy(const QString &fileName, const QString &newName)
QStringdecodeName(const QByteArray &localFileName)
QStringdecodeName(const char *localFileName)
QByteArrayencodeName(const QString &fileName)
boolexists(const QString &fileName)
boollink(const QString &fileName, const QString &linkName)
QFileDevice::Permissionspermissions(const QString &fileName)
boolremove(const QString &fileName)
boolrename(const QString &oldName, const QString &newName)
boolresize(const QString &fileName, qint64 sz)
boolsetPermissions(const QString &fileName, QFileDevice::Permissions permissions)
QStringsymLinkTarget(const QString &fileName)

详细说明

QFile是用于读取和写入文本以及二进制文件和 resources的I / O设备。一个QFile时可通过本身或使用,更方便地,具有QTextStreamQDataStream

文件名通常在构造函数中传递,但可以随时使用setFileName()进行设置。QFile期望文件分隔符为'/',而不管操作系统是什么。不支持使用其他分隔符(例如,“ \”)。

您可以使用exist()检查文件是否存在,并使用remove()删除文件。(QFileInfoQDir提供了更高级的文件系统相关操作。)

该文件用open()打开,用close()关闭,然后用flush()刷新。通常使用QDataStreamQTextStream读写数据,但是您也可以调用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()的QIODevice :: 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位Unicode QString。默认情况下,它假定使用用户系统的本地8位编码(例如,在大多数基于unix的操作系统上为UTF-8;有关详细信息,请参见QTextCodec :: codecForLocale())。可以使用QTextStream :: setCodec()进行更改。

要编写文本,我们可以使用operator <<(),将其重载以在左侧获取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 >>()读回数据。有关详细信息,请参见类文档。

使用QFileQFileInfoQDir通过Qt访问文件系统时,可以使用Unicode文件名。在Unix上,这些文件名被转换为8位编码。如果要使用标准C ++ API(<cstdio><iostream>)或特定于平台的API来访问文件而不是QFile,则可以使用encodeName()和encodeName()函数在Unicode文件名和8位文件名之间进行转换。

在Unix上,有一些特殊的系统文件(例如in中/proc),其size()总是返回0,但是您仍然可以从该文件中读取更多数据;数据是直接响应您调用read()生成的。但是,在这种情况下,您不能使用atEnd()来确定是否还有更多数据要读取(因为atEnd()对于声称大小为0的文件将返回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();
      }

Signals

与其他QIODevice实现不同,例如QTcpSocketQFile不会发出aboutToClose(),bytesWritten()或readyRead()信号。此实现细节意味着QFile不适合读写某些类型的文件,例如Unix平台上的设备文件。

平台特定问题

在类似Unix的系统和Windows上,文件权限的处理方式有所不同。在类Unix系统上的不可目录中,无法创建文件。在Windows上,情况并非总是如此,例如,“我的文档”目录通常是不可写的,但仍可以在其中创建文件。

Qt对文件权限的理解是有限的,这尤其会影响QFile :: setPermissions()函数。在Windows上,Qt将仅设置旧版只读标志,并且仅在未传递Write *标志时设置该标志。Qt不会操纵访问控制列表(ACL),这使得该功能对NTFS卷几乎没有用。对于使用VFAT文件系统的USB记忆棒,它可能仍然有用。POSIX ACL也不被操纵。

另请参见QTextStreamQDataStreamQFileInfoQDirThe Qt Resource 系统。

会员类型文件

typedef QFile :: DecoderFn

这是指向具有以下签名的函数的指针的typedef:

 QString myDecoderFunc(const QByteArray &localFileName);

另请参见setDecodingFunction()。

会员功能文档

QFile :: QFile(const QStringnameQObject * parent

构造一个具有给定对象的新文件对象,以表示具有指定名称的文件。

QFile :: QFile(QObject * parent

使用给定的parent构造一个新的文件对象。

QFile :: QFile(const QStringname

构造一个新的文件对象来表示具有给定名称的文件。

QFile :: QFile()

构造一个QFile对象。

[virtual]QFile :: 〜QFile()

销毁文件对象,必要时将其关闭。

bool QFile::copy(const QString &newName)

将当前由fileName()指定的文件复制到名为newName的文件中。返回true成功 否则返回false

请注意,如果已经存在名称为newName的文件,则copy()返回false(即QFile不会覆盖它)。

源文件在复制之前已关闭。

另请参见setFileName()。

[static] bool QFile::copy(const QString &fileName, const QString &newName)

这是一个重载功能。

将文件fileName复制到newName。返回true成功 否则返回false

如果名称为newName的文件已经存在,则copy()返回false(即QFile不会覆盖它)。

另请参见rename().

[static]QString QFile :: decodeName(const QByteArray localFileName

这与使用localFileNameQFile :: encodeName()相反。

另请参见encodeName()。

[static]QString QFile :: decodeName(const char * localFileName

这是一个重载功能。

返回给定localFileName的Unicode版本。有关详细信息,请参见encodeName()。

[static]QByteArray QFile :: encodeName(const QString fileName

fileName转换为由用户的语言环境确定的本地8位编码。这足以满足用户选择的文件名。硬编码到应用程序中的文件名只能使用7位ASCII文件名字符。

另请参见encodeName().

[static] bool QFile::exists(const QString &fileName)

返回truefileName指定的文件是否存在;否则返回false

注意:如果fileName是指向不存在文件的符号链接,则返回false。

bool QFile::exists() const

这是一个重载功能。

返回truefileName()指定的文件是否存在;否则返回false。否则返回false

另请参见fileName()和setFileName()。

[override virtual]QString QFile :: fileName()const

重新实现:QFileDevice :: fileName()const。

返回由setFileName()或QFile构造函数设置的名称。

另请参见setFileName()和QFileInfo :: fileName()。

创建一个名为linkName的链接,该链接指向fileName()当前指定的文件。什么是链接取决于底层文件系统(在Windows上是快捷方式还是在Unix上是符号链接)。返回true成功 否则返回false

该功能不会覆盖文件系统中已经存在的实体;在这种情况下,link()将返回false并将error()设置为返回RenameError

注意:要在Windows上创建有效的链接,linkName必须具有.lnk文件扩展名。

另请参见setFileName()。

这是一个过载功能。

创建一个名为linkName的链接,该链接指向文件fileName。什么是链接取决于底层文件系统(在Windows上是快捷方式还是在Unix上是符号链接)。返回true成功 否则返回false

另请参阅link().

[virtual] bool QFile::open(OpenMode mode)

重新实现:QIODevice :: open(QIODevice :: OpenMode模式)。

使用OpenMode 模式打开文件,如果成功,则返回true;否则,返回true。否则为假。

模式必须的QIODevice ::只读的QIODevice ::只写,或QIODevice中::读写。它还可能具有其他标志,例如QIODevice :: TextQIODevice :: Unbuffered

注意:WriteOnlyReadWrite模式下,如果相关文件尚不存在,则此函数将尝试在打开新文件之前创建它。

另请参见QIODevice :: OpenModesetFileName()。

bool QFile::open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags = DontCloseHandle)

这是一个重载功能。

在给定模式下打开现有文件句柄fhhandleFlags可用于指定其他选项。返回成功 否则返回。truefalse

例:

#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()实际上不会关闭文件,而只会刷新它。

警告:

  1. 如果FH不引用一个普通的文件,例如,它是stdinstdout或者stderr,你可能不能够寻求()。在这些情况下,size()返回0。有关更多信息,请参见QIODevice :: isSequential()。
  2. 由于此函数打开文件时未指定文件名,因此您不能将此QFileQFileInfo一起使用。

Windows平台注意事项

访问文件和其他随机访问设备时,必须以二进制模式打开fh(即,模式字符串必须包含“ b”,如在“ rb”或“ wb”中一样)。如果您将QIODevice :: Text传递给mode,则Qt将转换行尾字符。顺序设备(例如stdin和stdout)不受此限制的影响。

您需要启用对控制台应用程序的支持,以便在控制台上使用stdin,stdout和stderr流。为此,请将以下声明添加到应用程序的项目文件中:

 CONFIG += console

另请参见close()。

bool QFile::open(int fd, OpenMode mode, FileHandleFlags handleFlags = DontCloseHandle)

这是一个重载功能。

以给定模式打开现有文件描述符fdhandleFlags可用于指定其他选项。返回成功 否则返回。truefalse

QFile时使用此功能,行为打开关闭()由受控AutoCloseHandle标志。如果指定了AutoCloseHandle,并且此函数成功执行,则调用close()将关闭采用的句柄。否则,close()实际上不会关闭文件,而只会刷新它。

使用此功能打开的QFile会自动设置为原始模式。这意味着文件输入/输出功能很慢。如果遇到性能问题,则应尝试使用其他打开功能之一。

警告:如果fd不是常规文件,例如0(stdin),1(stdout)或2(stderr),则可能无法seek()。在这些情况下,size()返回0。有关更多信息,请参见QIODevice :: isSequential()。

警告:由于此函数打开文件时未指定文件名,因此您不能将此QFileQFileInfo一起使用。

另请参见close()。

[override virtual]QFileDevice :: Permissions QFile :: Permissions()const

重新实现:QFileDevice :: permissions()const。

另请参见setPermissions()。

[static] Permissions QFile::permissions(const QString &fileName)

这是一个重载功能。

返回的完整OR-ED一起组合一个QFile::Permission文件名

boolle :: 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的文件已经存在,则返回named()false(即QFile不会覆盖它)。

该文件在重命名之前已关闭。

如果重命名操作失败,Qt将尝试将此文件的内容复制到newName,然后删除此文件,仅保留newName。如果该复制操作失败或无法删除此文件,则将删除目标文件newName以恢复旧状态。

另请参见setFileName()。

[static] bool QFile::rename(const QString &oldName, const QString &newName)

这是一个过载功能。

将文件oldName重命名为newName。返回true成功 否则返回false

如果已经存在名称为newName的文件,则将重命名()返回false(即QFile将不会覆盖它)。

另请参见rename().

[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)

设置名称的文件。该名称不能有路径,相对路径或绝对路径。

如果文件已经打开,请勿调用此函数。

如果文件名没有路径或相对路径,则使用的路径将是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(),QFileInfoQDir

[override virtual]bool QFile :: setPermissions(QFileDevice :: Permissions 权限

重新实现:QFileDevice :: setPermissions(QFileDevice :: Permissions权限)。

将文件的权限设置为指定的权限true如果成功,或者false无法修改权限,则返回。

警告:此功能不处理ACL,这可能会限制其有效性。

另请参阅权限()和setFileName()。

[static] bool QFile::setPermissions(const QString &fileName, Permissions permissions)

这是一个过载功能。

fileName文件的权限设置为Permissions

[virtual] qint64 QFile::size() const

重新实现:QFileDevice :: size()常量。

[static] QString QFile::symLinkTarget(const QString &fileName)

返回由fileName指定的符号链接(或Windows上的快捷方式)所引用的文件或目录的绝对路径,如果fileName与符号链接不对应,则返回空字符串。

该名称可能不代表现有文件;它只是一个字符串。如果符号链接指向现有文件,则QFile :: exists()返回true

此功能在Qt 4.2中引入。

QString QFile::symLinkTarget() const

这是一个过载功能。

返回符号链接(或Windows上的快捷方式)指向的文件或目录的绝对路径,如果对象不是符号链接,则返回空字符串。

该名称可能不代表现有文件;它只是一个字符串。如果符号链接指向现有文件,则QFile :: exists()返回true

此功能在Qt 4.2中引入。

另请参见fileName()和setFileName()。

### 回答1: Qt5是一种跨平台的C++图形用户界面(GUI)应用程序开发框架,提供了大量的和模块,用于实现各种功能。其库使用的是面向对象的设计和编程思想,通过继承和多态性的特性来实现的组织和扩展。 Qt5的继承关系图非常庞大,很难在300字的篇幅内详细说明每个的继承关系。然而,我们可以简单介绍一些核心模块的继承关系。 首先,Qt Widgets模块提供了各种GUI相关。一些重要的包括QWidget,QMainWindow和QPushButton。QWidget是所有窗口部件的基。QMainWindow是主窗口的基,其中包含了菜单栏、工具栏和状态栏等部件。QPushButton则是一个按钮部件。 其次,Qt Core模块是Qt5中最基础的模块,提供了一些基本的和功能。QObject是所有QObject的基,它是一个可扩展的基,提供了一些有用的特性,如对象树的机制和信号与槽的机制。QVariant可以存储和操纵各种不同型的数据。 此外,Qt Network模块提供了用于网络编程的,如QTcpSocket和QHostAddress。Qt Sql模块提供了用于数据库访问和管理的,如QSqlDatabase和QSqlQuery。 还有一些模块,如Qt Multimedia、Qt OpenGL和Qt WebEngine等,分别提供了多媒体、OpenGL和Web引擎相关。 总之,Qt5的继承关系图非常庞大且复杂,上述只是介绍了一些核心模块的。想要深入了解Qt的全部,请查阅Qt的官方文档或相关的学习资料。 ### 回答2: Qt5是一个跨平台的C++应用程序框架,提供了丰富的库和工具箱用于开发图形用户界面和网络应用程序。Qt5库中的非常多,涉及的领域也非常广泛,因此很难在300个字中详细描述所有的继承关系图。在这里,我将简要介绍一些主要的和它们的继承关系。 首先,Qt5的核心称为QObject,它是所有可在QObject树中添加的对象的基。大多数Qt都直接或间接继承自QObject,这使得Qt具备了强大的事件处理、对象生命周期管理和信号槽机制。 在图形用户界面方面,QObject的直接子包括QWidget和QQuickItem。QWidget是所有窗口控件(如窗口、按钮、标签等)的基,而QQuickItem是在Qt Quick中使用的基。这些内部又有很多派生,用于实现不同型的控件和界面元素,如QLabel、QPushButton、QLineEdit等。 在网络方面,Qt5提供了丰富的网络,如QTcpSocket、QUdpSocket、QHostInfo等。这些用于实现网络通信和协议处理。同时,Qt5还提供了跨平台的网络模块QtNetwork,方便开发者进行网络编程。 除了图形界面和网络,Qt5还提供了其他库用于数据库访问、XML处理、多媒体处理、图像处理等。例如,QtSql模块提供了用于数据库访问的,如QSqlDatabase、QSqlQuery等;QtXml模块提供了用于XML文件处理的,如QDomDocument、QDomElement等。 总结起来,Qt5的继承关系非常复杂,涵盖了图形界面、网络通信、数据库访问、多媒体处理等领域。上述介绍只是其中的一部分,希望能够对Qt5的继承关系有一个初步的了解。如需详细了解,请参考Qt5官方文档或相关书籍。 ### 回答3: Qt5是一个跨平台的应用程序框架,提供了丰富的库和工具,用于开发图形界面和跨平台应用程序。Qt5库中包含了众多的,这些之间存在多种继承关系。 Qt5的继承关系图非常庞大,无法在300字内详尽列举和描述所有的继承关系。不过,我们可以大致介绍一下Qt5中的一些基本和它们的继承关系。 QObject是Qt中所有对象的基,它实现了信号槽的机制和对象树的管理。其他大部分都是QObject的子或间接子。 QWidget是Qt中的窗口小部件的基,它实现了所有窗口的基本功能。QMainWindow是QWidget的子,用于创建主窗口。除QWidget和QMainWindow外,Qt5还提供了许多其他的小部件,如QLineEdit、QLabel、QPushButton等。 QLayout和其子用于管理小部件的布局,包括QHBoxLayout、QVBoxLayout、QGridLayout等。 Qt还提供了一些跟图形相关,例如QPainter、QPixmap、QImage等。QPainter用于在小部件上绘制图形,QPixmap用于存储和操作图像,QImage用于处理图像的像素数据。 此外,Qt还提供了许多其他,如QFile、QDataStream等用于文件操作,QNetworkAccessManager、QNetworkRequest等用于网络操作,以及许多用于处理数据、进行线程操作等的。 总的来说,Qt5的继承关系图十分复杂,涵盖了各个领域的功能。在实际开发中,我们可以通过查看Qt官方文档来获得详细的继承关系和功能描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值