Qt学习(13)——Qt5中的文件与文件夹(1)

QFileQDirQFileInfo是Qt5中的基础类。QFile提供读写文件的接口,QDir提供对目录结构及其内容的访问,QFileInfo提供与系统无关的文件信息,包括文件系统中的文件名称和位置,访问时间和修改时间,权限或文件所有权。

文件大小

在这个例子中,我们确定文件的大小。

// file_size.cpp
#include <QTextStream>
#include <QFileInfo>

int main(int argc, char *argv[]) {

  QTextStream out(stdout);

  if (argc != 2) {

    qWarning("Usage: file_size file");
    return 1;
  }

  // 获取第一个参数
  QString filename = argv[1];

  // 通过QFile类的exist()方法判断文件是否存在
  if (!QFile(filename).exists()) {

    qWarning("The file does not exist");
    return 1;
  }  

  // 创建一个QFileInfo实例
  QFileInfo fileinfo(filename);

  // siza()方法获取文件大小信息,
  qint64 size = fileinfo.size();

  QString str = "The size is: %1 bytes";

  out << str.arg(size) << endl;
}

输出结果为:

$ ./file_size Makefile 
The size is: 48137 bytes

读内容

为了读取文件的内容,我们必须先打开文件以供阅读。然后创建输入文件流;从这个流中读取数据。

// read_file.cpp
#include <QTextStream>
#include <QFile>

int main(void) {

  QTextStream out(stdout);

  // 创建一个QFile实例
  QFile file("colours");

  // QFile类的open()方法以只读的方式打开文件
  if (!file.open(QIODevice::ReadOnly)) {

    qWarning("Cannot open file for reading");
    return 1;
  }

  QTextStream in(&file);

  while (!in.atEnd()) {

    QString line = in.readLine();    
    out << line << endl;
  }

  file.close();
}

该示例从colours文件中读取数据。该文件包含八种颜色的名称。

QTextStream in(&file);

输入流被创建。QTextStream接收文件的引用。数据将从这个流中读取。

while (!in.atEnd()) {

  QString line = in.readLine();    
  out << line << endl;
}

在while循环中,我们逐行读取文件直到文件结束。如果没有更多数据要从流中读取,则atEnd()方法返回true。readLine()方法从流中读取一行。
输出结果为:

$ ./read_file colours 
red
green
blue
yellow
brown
white
black
violet

写文件

为了写入文件,我们以写入模式打开文件,创建一个指向该文件的输出流,并使用写入操作符写入该流。

// write2file.cpp
#include <QTextStream>
#include <QFile>

int main(void) {

  QTextStream out(stdout);

  // QFile对象通过给定的文件名创建  
  QString filename = "distros";
  QFile file(filename);

  // 应用Qfile类的open()方法以只写的方法打开文件
  if (file.open(QIODevice::WriteOnly)) {

    // 创建一个在文件引用上运行的QTextStream。
    // 换句话说,要写入的数据流被导向文件。  
    QTextStream out(&file);
    // 通过<<操作符写数据
    out << "Xubuntu" << endl;
    out << "Arch" << endl;
    out << "Debian" << endl;
    out << "Redhat" << endl;
    out << "Slackware" << endl;

  } else {

    qWarning("Could not open file");
  }  

  // 关闭文件
  file.close(); 
}

该示例将五个linux发行版的名称写入名为distros的文件名。
输出结果为:

$ ./write2file 
$ cat distros 
Xubuntu
Arch
Debian
Redhat
Slackware

复制文件

当我们复制文件时,我们使用不同的名称或在文件系统的不同位置创建文件的确切复制。

// copy_file.cpp
#include <QTextStream>
#include <QFile>

int main(int argc, char *argv[]) {

  QTextStream out(stdout);

  // 该程序有两个参数
  if (argc != 3) {

      qWarning("Usage: copyfile source destination");
      return 1;
  }

  // 获取源文件名字
  QString source = argv[1];

  // QFile类的exists()方法判断文件是否存在
  if (!QFile(source).exists()) {
      qWarning("The source file does not exist");
      return 1;
  }

  // 获取目标文件名字
  QString destin(argv[2]);

  // 源文件使用QFile::copy()方法复制。
  // 第一个参数是源文件名,第二个参数是目标文件名。
  QFile::copy(source, destin);
}

该示例使用QFile::copy()方法创建提供的文件的副本。
输出结果为:

$ ./copy_file colours colours2
$ cat colours
red
green
blue
yellow
brown
white
black
violet
$ cat colours2
red
green
blue
yellow
brown
white
black
violet
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt,可以使用QFile和QDir两个类来实现将一个文件复制到文件夹的功能。 首先,我们需要创建一个QFile对象来表示要复制的源文件,以及一个QDir对象来表示目标文件夹。然后,使用QFile的copy()函数将源文件复制到目标文件夹。 下面是一个具体的代码示例: ```cpp QString sourceFilePath = "/path/to/source/file.txt"; // 源文件路径 QString destinationFolderPath = "/path/to/destination/folder"; // 目标文件夹路径 QFile sourceFile(sourceFilePath); QDir destinationFolder(destinationFolderPath); // 检查源文件和目标文件夹是否存在 if (sourceFile.exists() && destinationFolder.exists()) { // 获取源文件名 QString fileName = sourceFile.fileName(); // 拼接目标文件路径 QString destinationFilePath = destinationFolderPath + "/" + fileName; // 复制文件 if (sourceFile.copy(destinationFilePath)) { qDebug() << "文件复制成功!"; } else { qDebug() << "文件复制失败!"; } } else { qDebug() << "源文件或目标文件夹不存在!"; } ``` 在这个示例,我们首先创建了QFile和QDir对象,然后检查源文件和目标文件夹是否存在。如果存在,就通过拼接目标文件路径来复制文件。复制成功后,会输出"文件复制成功!";如果复制失败或源文件或目标文件夹不存在,会相应地输出相应的提示信息。 这是一个基本的示例,你可以根据实际需求做进一步的适应或扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值