Qt文件管理及标准对话框

文件管理

目录操作

主要用到两个类:QDir、QFileInfo

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

QFileInfo

  • QFileInfo类提供了与系统无关的文件信息,包含文件的名称、在文件系统中的位置(路劲)、文件的访问权限以及是否是一个目录或者符号链接等。QFileInfo也可以获取文件的大小和最近一次修改/读取的时间,还可以获取Qt资源的相关信息。
  • QFileInfo指向文件可以在QFileInfo对象构建是设置,或者以后使用setFile()来设置。可以使用exists()函数来查看文件是否存在,使用size()获取文件的大小
判断目录是否存在
QDir mDir("D:/Qt/workspace");
qDebug()<<mDir.exists();
创建目录
QDir mDir("D:/Qt/workspace/testDir");
if (!mDir.exists())
{ // 如果目录不存在则创建该目录
	mDir.mkdir("D:/Qt/workspace/testDir");
	qDebug()<<"Created New Dir";
}
else 
{
	qDebug()<<"Exists";
}
获取常用目录
qDebug()<<mDir.current();
qDebug()<<mDir.currentPath();// 获取应用程序所在的当前目录
qDebug()<<mDir.homePath();//Linux经常用
qDebug()<<mDir.tempPath();
qDebug()<<mDir.rootPath();
目录切换
qDebug()<<mDir.dirName();
qDebug()<<mDir.absolutePath();
mDir.cd(":/");
qDebug()<<mDir.absolutePath();
文件夹遍历
QDir mDir("D:/Qt/workspace/q_1");

foreach(QFileInfo mItem, mDir.entryInfoList)
{
	if(mItem.isDir())
		qDebug()<<"Dir"<<mItem.filePath();
	else if(mItem.isFile())
		qDebug()<<"File"<<mItem.filePath();
}
文件夹遍历

同上:使用mItem.isFile()
也可以使用静态方法:QDir::Files

过滤器使用
QDir mDir(QDir::current());

// 过滤器规则,支持正则表达式
QStringList filters;
filters << "*.cpp"<<"*.h"<<"*.txt"<<"*.pro";

// 使用过滤器
mDir.setNameFilters(filters);
qDebug()<<mDir.entryList(filters,QDir::Files);

文件操作

文件操作主要用到3个类:QFile、QFileInfo、QDir
QFile:

  • QFile类提供了一个用于读/写文件的接口,用来读/写文本文件、二进制文件和Qt资源的I/O设备
  • 一般在构建QFile对象时便指定文件名,当然也可以使用setFileName()进行设置,可以使用exists()来检查文件是否存在,使用remove()来删除一个文件
  • 一个文件可以使用open()打开,使用close()关闭,使用flush()刷新。文件的读写可以使用read()、readLine()、readAll()、和write()。可以使用size()函数来获取大小。使用seek()来定位到文件的任意位置。使用pso()来获取当前的位置,使用atEnd()来判断是否到达了文件尾
打开并写入文件

文件操作流程: 打开->写入/读取->关闭

访问一个设备之前,需要使用open()函数打开该设备,并且必须指定正确的打开模式,不同的打开模式之间使用“|”符号可以同时使用

打开设备后可以使用write()或者putChar()来进行写入。使用seek()函数进行文件指针移动(如果有),使用read()、readLine()、readAll()进行读取,最后使用close()关闭设备

枚举值描述
QIODevice::NotOpen未打开
QIODevice::ReadOnly以只读方式打开
QIODevice::WriteOnly以只写方式打开
QIODevice::ReadWrite以读写方式打开
QioDevice::Append以追加的方式打开,新增的内容将被追加到文件末尾
QIODevice::Truncate以重写的方式打开,在写入新的数据时会将游标设置在文件开头;覆盖式重写
QIODevice::Text在读取时,将行结束符转换成\n;在写入时,将行结束符转换成本地格式。例如:Win32平台是\r\n
QIODevice::Unbuffered忽略缓存
QFile file("text.txt");
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{ // 文件不存在会创建文件
	qDebug()<<file.errorString();
}
else
{
	qDebug()<<"open sucess";
}
file.wirte("hello File Test! \n I Lile Qt Program");
file.close();
打开并读出文件
QFile file("t_File.txt");
if(!file.open(QIODevice::ReadOnly() | QIODevice::Text))
{
	qDebug()<<file.errorString();
}
else
{
	qDebug()<<"open sucess";	
}

while(!file.atEnd())
{
	QByteArray line = file.readLine();
	qDebug()<<"read some data " << line;
}
QIODevice类

QIODevice类是Qt所有I/O设备的基础类,QFile等类提供一个抽象接口

获取文件的路径和大小
QFile file("image.jpg");
QFileInfo info(file);

// 获取文件路径及大小
qDebug()<<QStringLiteral("路径")<<info.absoluteFilePath()<<QStringLiteral("大小")<<info.size();

if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
	qDebug()<<file.errorString();

// 文件指针
file.seek(6);
QByteArray Array;
array = file.read(4);
qDebug()<<"read some data " << array;
qDebug()<<"pos :" << file.pos();
file.close();

文件读写流

out对电脑来说是输出,对文本来说是输入

  • 缓存到文件
  • 文件到缓存
// 写入文本流
QFile file("output.txt");
if(!file.open(QFile::WriteOnly | QFile::Truncate))
{
	QTextStream out(&file);
	out<< qSetFieldWidth(10) << left<< 3.1415926; // 左对齐。10字宽
	out<<"\r\n insert new line";
}
file.close();
// 读入文本流
QFile file("output.txt");

if(!file.open(QIODevice::ReadOnly| QIODevice::Text))
{
	qDebug()<<file.errorString();
}

QTextStream in(&file);
while(!in.atEnd())
{
	QString oneLine = in.readLine();
	qDebug()<<oneLine;
}

// 文件指针跳转到头
in.seek(0);
QString allLine = in.readAll();
qDebug()<<" " << allLine;
file.close();

二进制流读写操作

  • 文件拼接 截取 用的比较多
  QFile file("file.dat");
    file.open(QIODevice::WriteOnly);
    QDataStream out(&file); // we will serialize the data into the file
    out << QString("the answer is"); // serialize a string
    out << (qint32)42; // serialize an integer
    file.close();

    QFile file("file.dat");
    file.open(QIODevice::ReadOnly);
    QDataStream in(&file); // read the data serialized from the file
    QString str;
    qint32 answer;
    in >> str >> answer; // extract "the answer is" and 42
    file.close();

标准对话框

  • Qt自身有个强大的Demo :Standard Dialogs Example
void Widget::on_pushButtonCirticalMessage_clicked() 
{ 
	QMessageBox::StandardButton reply; 
	reply = QMessageBox::critical(this, 	QString::fromLocal8Bit("标准警告对话框"), 
	QString::fromLocal8Bit("这里填写需要警告的内容"), 
	QMessageBox::Abort | QMessageBox::Retry | QMessageBox::Ignore); 
	if (reply == QMessageBox::Abort) 
		ui->lineEditCritical->setText(tr("Abort")); 
	else if (reply == QMessageBox::Retry) 
		ui->lineEditCritical->setText(tr("Retry")); 
	else 
		ui->lineEditCritical->setText(tr("Ignore")); 
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

√沫影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值