Qt 5.9.5文件管理&常用参数

文件操作流程:

PS:打开­>写入/读取­>关闭
(1)、访问一个设备以前 ,需要使用 open ()函数打开该设备 ,而且必须指定正确的打开模式,不同的打开模式之间可以使用“|”符号同时使用。
(2)、打开设备后可以使用write()或者putChar()来进行写人,可以使用seek函数进行文件指针移动(如果有) ,使用 read ()、readLine ()或者 readAll ()进行读取 ,
(3)、最后使用 close()关闭设备。

文件管理常用参数:

枚举值 描述
QIODevice::NotOpen 未打开
QIODevice::ReadOnly 以只读方式打开
QIODevice::WriteOnly 以只写方式打开
QIODevice::ReadWrite 以读写方式打开
QIODevice::Append 以追加的方式打开 ,新增加的内容将被追加到文件末尾
QIODevice::Truncate 以重写的方式打开 ,在写入新的数据时会将游标设置在文件开头 ;覆盖重写
QIODevice::Text 在读取时 ,将行结束符转换成 \n ;在写入时 ,将行结束符转换成本地格式 ,例如 Win32 平台 上是 \r\n
QIODevice::Unbuffered 忽略缓存

QIODevice类

QIODevice类是Qt中所有I/O设备的基本接口类。为QFIle等类提供一个抽象接口。

继承关系图

在这里插入图片描述

参考源代码

/*********************************************************************************************************************************************************************************
  lesson6(本文介绍文件管理)
  此处为注释:本文代码仅供参考

  *********************************************************************************************************************************************************************************/

#include <QDir>
/*********************************************************************************************************************************************************************************
#include <QDir>
(1)、QDir类具有存取目录结构和内容的能力,使用它可以操作目录、存取目录或文件信息、操作底层文件系统,而且还可以存取Qt的资源文件。
(2)、Qt使用“/”作为通用的目录分隔符和URL路径分隔符。如果在程序中使用“/”作为目录分隔符,Qt会将其自动转换为符合底层操作系统的分隔符(如Linux使用“/”,Windows使用“\”)。
(3)、判断目录是否存在可以使用exists(),目录的属性可以使用isReadable()、isAbsolute()、isRelative()和isRoot()来获取。
(4)、目录下有很多条目,包括文件、目录和符号连接,总的条目数可以使用count()来统计。entryList()返回目录下所有条目组成的字符串链表。
(5)、文件可以使用remove()函数删除,删除目录用rmdir()。一般使用Filters对目录下的文件进行过滤。

*********************************************************************************************************************************************************************************/
#include <QFileInfo>
/*********************************************************************************************************************************************************************************

(1)、QFilelnfo类提供了与系统无关的文件信息,包括文件的名称、在文件系统中的位置(路径)、文件的访问权限以及是否是一个目录或者符号链接等。
(2)、QFilelnfo也可以获取文件的大小和最近一次修改/读取的时间,还可以获取Qt资源的相关信息。
(3)、QFilelnfo指向的文件可以在QFileinfo对象构建时设置,或者以后使用setFile()来设置。可以使用以exists()来查看文件是否存在,使用size()获取文件的大小。
*********************************************************************************************************************************************************************************/
#include <QFile>
/*********************************************************************************************************************************************************************************
(1)、QFile类提供了一个用于读/写文件的接口它可以用来读/写文本文件、二进制文件和Qt资源的I/0 设备。
(2)、一般在构建QFile对象时便指定文件名,当然也可以使用setFileName()进行设置。可以使用exists()来检查文件是否存在使用remove()来删除一个文件 。
(3)、一个文件可以使用open()打开使用close()关闭,使用flush()刷新,文件的读写可以使用read()、readLine()、readAll()和write(),
(4)、可以使用自size()函数来获取文件的大小使用seek()来定位到文件的任意位置使用pos()来获取当前的位置,使用atEnd()来判断是否到达了文件的末尾 。
*********************************************************************************************************************************************************************************/

#include "lesson6.h"
#include <QDebug>

lesson6::lesson6(QWidget *parent)
	: QWidget(parent)
{
    
    
	ui.setupUi(this);
#if 0
//文件目录操作
	QDir mDir("C:/QtTest/TestQt");
	if (!mDir.exists()) //如果不存在则创建该目录
	{
    
    
		mDir.mkdir("C:/QtTest/TestQt");
		qDebug() << "Created New";
	}
	else
	{
    
    
		qDebug() << "Already Exists";
	}
	qDebug() << mDir.exists();//exists()是bool类型,用于再次判断是否存在该目录;
	qDebug() << mDir.current();//获取项目文件绝对路径
	qDebug() << mDir.currentPath();//获取项目文件绝对路径
	qDebug() << mDir.homePath();//获取"C:/Users/管理员文件夹名字"
	qDebug() << mDir.tempPath();//获取本地的temp文件夹
	qDebug() << mDir.rootPath();//获取根路径
	qDebug() << mDir.dirName();//获取当前文件夹名字
	qDebug() << mDir.absolutePath();//获取当前文件夹绝对路径
	mDir.cd("c:/");//回退到根目录
	qDebug() << mDir.absolutePath();//获取当前文件夹绝对路径
#endif//文件目录操作
#if 0
	//遍历当前项目文件夹下所有文件
	QDir mDir("C:/FILE2/Qt/lesson6");
	foreach(QFileInfo mItem, mDir.entryInfoList())//文件遍历
	{
    
    
		if (mItem.isDir())
			qDebug() << " Dir " << mItem.filePath();//遍历目录下所有文件夹(不包括带类型文件)
		else if (QDir::Files)
			//此处提供两个方法
			/*****************************************************
			 方法一:mItem.isFile();
			     获取QFileInfo(文件信息)所有mItem(文件夹).是有文件夹 
			*****************************************************/
			/*****************************************************
			方法二:QDir::Files
			    调用QDir的Files(多个文件夹)
			*****************************************************/
			qDebug() << " File " << mItem.filePath();//遍历当前目录所有文件(不包括文件夹)
	}

#endif  //遍历文件夹及目录
#if 0

	QDir mDir(QDir::current());//获取当前目录

	QStringList filters;//类型QStringList
	filters << "*.cpp" << "*.h" << "*.txt" << ".pro"; //筛选文件类型;
	//void setNameFilters(const QStringList &nameFilters);
	mDir.setNameFilters(filters);//设置尾椎类型过滤,传QStringList类型
	qDebug() << mDir.entryList(filters, QDir::Files);//遍历目录下文件

#endif //遍历筛选过滤文件
#if 0
	QFile file("tzFile.txt"); //构造一个QFile对象
	/*
	    enum OpenModeFlag {
   无法打开:NotOpen = 0x0000,
       只读:ReadOnly = 0x0001,
       只写:WriteOnly = 0x0002,
   可读写的:ReadWrite = ReadOnly | WriteOnly,
  附加/追加:Append = 0x0004,
   io流截断:Truncate = 0x0008,
   文本模式:Text = 0x0010,
   禁用缓冲:Unbuffered = 0x0020
    };
	*/
	if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) //文件不存在会创建文件 
	{
    
    
		qDebug() << file.errorString();//存储错误信息
	}
	else
	{
    
    
		qDebug() << "open sucess";//如果有文件提示"open sucess"
	}
	file.write("hello TZ EDU! \n I Lile Qt program");//写入文本内容
	file.close();//关闭文本
#endif //创建&写入文本
#if 0
	QFile file("tzFile.txt");//构造一个QFile对象
	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))//只读的方式打开文本
	{
    
    
		//Contains the error string if an error happened during image creation.
		//如果在映像创建过程中发生错误,则包含错误字符串。
		qDebug() << file.errorString();//存储错误信息
	}
	else
	{
    
    
		qDebug() << "open sucess!";
	}
	while (!file.atEnd()) //如果不为无数据返回为true;
	{
    
    
		//readLine()类型为QByteArray
		QByteArray line = file.readLine();//读取行文本,用QByteArray类型存储行文本信息
		qDebug() << "read some data : " << line;//读取出信息
	}
#endif //读取文本信息
#if 0
	//如果没有这个txt文件会提示:系统找不到指定的文件。
	QFile file("tzFileddd.txt");
	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))//读取txt文本文件
	{
    
    
		qDebug() << file.errorString();//错误信息提示:"系统找不到指定的文件。"
	}
	else
	{
    
    
		qDebug() << "open sucess !";
	}
#endif //读取文件错误方式
#if 0
	
	//读取文件信息
	QFile file("image.jpg");
	QFileInfo info(file);
	/* 获取文件路径及大小 */
	qDebug() << QStringLiteral("路径") << info.absoluteFilePath()//获取文件路径
		     <<"\n"<< QStringLiteral("大小") << info.size();//获取文件大小

	//判断是否有文件可读
	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
		qDebug() << file.errorString();

	//读取io流
	file.seek(6);//查找到流的第6位
	QByteArray array;//存放io流信息
	array = file.read(4);//获取到从第6位开始的后4位二进制
	qDebug() << "read some data:" << array;//输出流的信息
	qDebug() << "pos:" << file.pos();//输出当前流位置
	file.close();//关闭文件

#endif//读取image.jpg文件路径及大小,截取流,进行读取。
#if 0
	QFile file("output.txt"); //构造一个QFile对象
	if (file.open(QFile::WriteOnly | QFile::Truncate))//没有这个文件则创建一个
	{
    
    
		QTextStream out(&file);//输入文本流到file对象中,这里out为输入,in输出
		//输入信息到流中
		out << "Pi" << 3.1415926;  
		out << "\r\n insert new line";
	}
	file.close();//关闭文件

	//读取文件
	QFile fileOpen("output.txt");//打开对象output.txt

	//判断是否能打开
	if (!fileOpen.open(QIODevice::ReadOnly | QIODevice::Text))
		qDebug() << fileOpen.errorString();

	//构造一个in读取流
	QTextStream in(&fileOpen);
	while (!in.atEnd())//遍历流信息
	{
    
    
		QString oneLine = in.readLine();//用行读取,存储格式为QString
		qDebug() << oneLine;//输出文本信息
	}
	qDebug() << "================================================";
	//读取流信息(PS:是以十六进制读取的信息,没有\n换行概念.所以在读取出来是一行的信息)
	in.seek(0);//文件指针跳转到头
	QString allLine = in.readAll();//读取所有信息,存储格式为QString
	qDebug() << " " << allLine;//输出信息
	fileOpen.close();//关闭文本流
#endif//创建一个文本用io流写入 and 读取io流文件
#if 1 
	QFile file("file.dat");
	file.open(QIODevice::WriteOnly);//没有这个文件就创建一个
	QDataStream out(&file); //构造QDataStream用于输入流
	out << QString("the answer is"); // 将字符串io流化
	out << (qint32)42; //io流化一个整数
	file.close();
	//信息读取
	//QFile file("file.dat");
	file.open(QIODevice::ReadOnly);//判断是否能打开文件
	QDataStream in(&file);//从文件中读取io流的数据
	QString str;//转化为QString类型读取
	qint32 answer;//转化为qint32类型读取
	in >> str >> answer; // 输出“the answer is”和 42
	file.close();//关闭文件流
#endif //创建一个bat文件,读取文件。(PS:io流操作)
}

猜你喜欢

转载自blog.csdn.net/weixin_45357007/article/details/125150634