首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何了解Qt文件读写操作?一篇文章快速搞懂

Qt当中使用QFile类对文件进行读写操作,对文本文件也可以与QTextStream一起使用,这样读写操作会更加简便。QFileInfo可以用来获取文件的信息。QDir可以用于对文件夹进行操作。

一、文件读操作

(1)使用QFile类

Qt封装了QFile类,方便我们对文件进行操作,可以按照如下的步骤进行:

使用QFile加载文件对象

打开文件 file.open(打开方式)

操作文件

关闭文件 file.close()

使用QFile首先用只读方式打开一个文本文件,然后用readAll()方法将文件内容一次全部读取出来,返回值是字节数组QByteArray。QByteArray用来存放二进制数据,如果想要看文字内容需要转换成QString。

  QString path = QFileDialog::getOpenFileName(this, "打开文件", "D:\\temp\\");

  QFile file(path);

  if(!file.open(QIODevice::ReadOnly | QIODevice::Text))

  {

      return;

  }

  QByteArray allArray = file.readAll();

  QString allStr = QString(allArray);

  file.close();

Qt默认使用utf-8的编码方式,在Linux中一般没有问题,因为Linux默认也是用utf-8。不过Windows里一般用的是gb18030,所以除非我们明确将文件保存成utf-8编码,否则在Qt代码里需要对编码做一些转换操作:

  QString path = QFileDialog::getOpenFileName(this, "打开文件", "D:\\temp\\");

  QFile file(path);

  if(!file.open(QIODevice::ReadOnly | QIODevice::Text))

  {

      return;

  }

  QByteArray allArray = file.readAll();

  QTextCodec *codec = QTextCodec::codecForName("gb18030");

  QString allStr = codec->toUnicode(allArray);

  file.close();

我们也可以使用readLine方法一次读取一行,然后每次对一行文字进行操作:

  QString path = QFileDialog::getOpenFileName(this, "打开文件", "D:\\temp\\");

  QFile file(path);

  if(!file.open(QIODevice::ReadOnly | QIODevice::Text))

  {

      return;

  }

  while(!file.atEnd())

  {

      QByteArray array = file.readLine();

      QString str = QString(array);

  }

  file.close();

(2)使用QTextStream类

如果操作的是文本文件,Qt还专门封装了一个处理文本流的类,我们可以一行一行的读取文本内容

  QString path = QFileDialog::getOpenFileName(this, "打开文件", "D:\\temp\\");

  QFile file(path);

  if(!file.open(QIODevice::ReadOnly | QIODevice::Text))

  {

      return;

  }

  QTextStream in(&file);

  //in.setCodec("utf-8");

  while (!in.atEnd())

  {

      QString line = in.readLine();

  }

  file.close();

二、文件写操作

(1)使用QFile类

使用QFile同样可以对文件进行写操作:

QString path = QFileDialog::getSaveFileName(this, "保存"

                                              , "D:\\temp\\", "TXT(*.txt)");

  QFile file(path);

  file.open(QIODevice::WriteOnly | QIODevice::Text);

  file.write("你好");

  file.close();

(2)使用QTextStream类

QTextStream类对操作符进行了重载,我们可以通过

  QString path = QFileDialog::getSaveFileName(this, "保存"

                                              , "D:\\temp\\", "TXT(*.txt)");

  QFile file(path);

  file.open(QIODevice::WriteOnly | QIODevice::Text);

  QTextStream out(&file); 

  QString str = "你好";

  out

  file.close();

三、文件信息读取

除了对文件的读写操作,Qt还封装了QFileInfo类帮助我们获取文件的元数据,比如文件大小、后缀名、创建时间、最后修改时间等等:

  QString path = QFileDialog::getOpenFileName(this, "打开文件", "D:\\temp\\");

  QFileInfo file(path);

  qDebug()

  qDebug()

  qDebug()

  qDebug()

  qDebug()

四、文件夹的操作

QDir类可以对路径/文件夹/目录进行操作(不同的系统有不同的名称)。首先我们可以用QDir表示绝对路径,比如:

 QDir("/home/user/Documents")

 QDir("C:/Documents and Settings")

也可以表示相对路径,比如:

QDir("images/landscape.png")

我们可以用IsRelative()和IsAbsolute()方法来检验某个QDir对象使用的是绝对路径还是相对路径。不管用的是哪一种,两者之间也可以相互转化:

QDir directory("Documents/Letters");

QString path = directory.filePath("contents.txt");

QString absolutePath = directory.absoluteFilePath("contents.txt");

我们经常用到QDir的例子有比如检查某个路径是否存在:

 QDir dir("example");

  if (!dir.exists())

  {

      qWarning("Cannot find the example directory");

  }

或者查找某个路径下的文件:

  QDir dir = QDir::root();                // "/"

  if (!dir.cd("tmp"))                    // "/tmp"

  {

      qWarning("Cannot find the \"/tmp\" directory");

  }

  else

  {

      QFile file(dir.filePath("ex1.txt")); // "/tmp/ex1.txt"

      if (!file.open(QIODevice::ReadWrite))

      {

          qWarning("Cannot create the file");

      }

  }

五、文件夹的操作

Qt对文件和文件夹的操作封装了很多类,比如对文件操作可以使用QFile,文本文件的读写可以使用QTextStream,读取文件元数据可以使用QFileInfo,文件夹的操作可以使用QDir等。这些类为开发者提供了极大的便利,还有很多方法本文不能一一介绍到,感兴趣的读者也可以查阅Qt的帮助文档。

最后,各位朋友如果有兴趣或是想与我们一起学习计算机技术(软件开发),可以关注我哦!这里还有一些你可能不知道的趣事分享哟。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201008A07GJ200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券