生命如歌,代码如诗

生命如歌,代码如诗

一、概述

Qt 作为一个通用开发库,提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力。下面是 I/O 设备的类图:

QT基础入门之文件操作-LMLPHP

  • QIODevice:所有I/O设备类的父类,提供字节块读写的通用操作以及基本接口
  • QFileDevice:Qt5新增加的类,提供有关文件操作的通用实现
  • QFile:访问本地文件或嵌入资源
  • QTemporaryFile:创建和访问本地系统的临时文件
  • QBuffer:读写QbyteArray,内存文件
  • QProcess:运行外部程序,处理进程间通信
  • QAbstractSocket:所有套接字的父类
  • QTcpSocket:TCP协议网络数据传输
  • QUdpSocket:传输UDP保温
  • QSslSocket:使用SSL/TLS传输数据

二、 QFileInfo文件信息的获取

QFile提供从文件中读取和写入数据的方法,构造函数参数为文件路径。也可以先创建好对象之后,使用setFileName()来修改

	#include <QFileInfo>
	#include <QDebug>
	#include <QDateTime>
	
	//QFileInfo 文件信息类
	QFileInfo info(path);//参数为文件的路径
	
	qDebug() << "大小" << QString::number(info.size()) << "后缀名" << info.suffix() << " 文件名称:"<<info.fileName() << " 文件路径:"<< info.filePath();
	qDebug() << "创建日期" << info.created().toString("yyyy/MM/dd hh:mm:ss ap t");
	qDebug() << "最后修改日期"<<info.lastModified().toString("yyyy-MM-dd hh:mm:ss");

三、 文本数据输入/输出

	/*读取文件*/
	QFile file("test.txt");
	if(!file.open(QFile::ReadOnly | QFile::QIODevice::Text))
	{
		qDebug() << "file open fail"return;
	}
	else
	{
		QTextStream out(&file);		//创建输出流
		while(!out.atEnd())
		{
			QString oneLine = out.readLine();	//逐行读取
			qDebug() <<oneLine;
		}
	}
	file.close();

	/*写入文件*/
	QFile fileIn("test.txt");
	if(!fileIn.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
	{
		qDebug() <<"file open fail";
		return;
	}
	QTextStream inStr(&fileIn);
	QString strInfo = "hello, wrold!";
	inStr << strInfo << "\n";
	fileIn.close();

QDataSteam提供基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统,CPU或者字节顺序(大端或小端)。可以直接读写没编码的二进制数据。例如图像、视频、音频等。实例如下:

	QFile file("file.dat");
	file.open(QIODevice::ReadOnly);
	//关联文件
	QDataStream stream(&file);
	QString str = "hello, wrold";
	//借助QDataStream将内容以二进制的形式输入文件
	stream << str;
	
	file.close();

QFile.open()的参如下:

07-18 01:37