Qt文件系统使用笔记(QFile,QDir)

2 篇文章 0 订阅

一.文件/文件夹

1.1 检查存在(创建/删除)

//检查文件存在
if(QFile::exists(outputPath))
{
     QFile file(outputPath);
     file.remove();//存在则删除
}
//检查文件夹存在
QDir dir(m_sPathIn);
if(!dir.exists()) dir.mkdir(m_sPathOut);//不存在则创建

1.2 QFileDialog选择文件/文件夹

A.设置默认路径(从配置文件获取)

QSettings setting("./Setting.ini", QSettings::IniFormat);//QSettings能记录一些程序中的信息,下次再打开时可以读取出来
QString lastPath = setting.value("Process/Src").toString();//获取上次的打开路径
QFileDialog fileDialog(this);
fileDialog.setWindowTitle(QString("请选择图像文件"));//设置窗口的标题
fileDialog.setNameFilter("图像文件(*.png *.jpg *.tif)"); //设置一个过滤器
fileDialog.setDirectory(lastPath);

B.选择文件

	if (fileDialog.exec() == QDialog::Accepted) {//弹出对话框
		QStringList strPathList = fileDialog.selectedFiles();
		if (strPathList.size() > 0) {
			QString sPath = strPathList.at(0);
			//ui->lineEdit_Src->setText(sPath);
			//setting.setValue("Process/Src", sPath);
		}		
	}		

C.选择文件夹

QString sPath = QFileDialog::getExistingDirectory(this, QString("选择文件夹"), sPath);//"/" 第三参数可为上次路径
//ui->lineEdit_Reg->setText(sPath);

1.3 打开文件夹

QDesktopServices::openUrl(QUrl::fromLocalFile(sPath));

1.4 文件重命名

f.rename(str_dir + "/" + str);

1.5 遍历文件夹QDir(文件过滤)

//示例一 获取文件夹下的文件名
foreach(QString fileName,dir.entryList(QDir::Files))

//示例二 获取两级文件夹下的文件夹/文件
QFileInfoList infoList = dir.entryInfoList(dir.filter() | QDir::NoDotAndDotDot);//过滤器值按位或运算符组合
foreach(QFileInfo fileInfo, infoList) {
	if (fileInfo.isDir())
	{
		dir.setPath(fileInfo.filePath());//若是文件则为上级目录+“/..”
		dir.setNameFilters(QStringList() << "*.tif" << "*.jpg" << "*.png");//filter	文件过滤
		//dir.setSorting(QDir::DirsFirst);// 优先显示目录
		QFileInfoList infoList2 = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs);//筛选文件夹								
		QFileInfoList infoList2 = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);//筛选文件	
	}
	
	dir.cd("tool");//QDir切换到下级tool目录
    dir.cdUp();//QDir切换到上级目录
}
dir.entryInfoList(dir.filter() | QDir::NoDotAndDotDot | QDir::Files);//两个|不能过滤掉文件(测试无效)

1.6 QFileInfo

filePath() //可能为“/.”和“/…”。

二.txt

2.1 读取

QString sPathTxt = sPath+QString("/FrameInfo.txt");
    QFile fileTxt(sPathTxt);
    //方式一 有txt文件
    if(fileTxt.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream txtInput(&fileTxt);//D:/Code/QListView/debug/COM_3/模板/鼠脑.txt
        QString lineStr;
        bool bHaveValue = false;
        while(!txtInput.atEnd())
        {
            lineStr = txtInput.readLine();
            QStringList sList=lineStr.split(' ');//按空格分隔 10 42 50 46 51
        }
        fileTxt.close();         
    }

2.2 写入(追加/覆盖)

m_mutex.lock();

file.open(QIODevice::WriteOnly);//不存在则创建,默认覆盖  | QIODevice::Append
//file.open(QIODevice::WriteOnly | QIODevice::Append);//文末追加,不存在则创建
QTextStream text_stream(&file);
text_stream<< str3 << '\t' << sText << endl;//换行亦可<<"\r\n"
file.flush();
file.close();

m_mutex.unlock();

三.过滤,排序

3.1 过滤,排序

QDir中的Filter和SortFlag枚举变量

QFileInfoList infoList = dir.entryInfoList(dir.filter()|QDir::NoDotAndDotDot);//过滤(./..) 按位或运算
QFileInfoList infoList = dir.entryInfoList(dir.filter()|QDir::NoDotAndDotDot,QDir::Time);//测试无效
//dir.setSorting(QDir::DirsFirst);// 优先显示目录
QFileInfoList infoList2 = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs);//筛选文件夹								
QFileInfoList infoList2 = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);//筛选文件

四.其它

4.1 获取exe所在路径

main.cpp中头文件全局变量比main函数先初始化,若已运行QApplication app(argc, argv); 则可调用

QString sPath = QApplication::applicationDirPath();
QString sPath2 = QCoreApplication::applicationDirPath();

若未运行,通过新建文件夹的默认路径获取。

QDir *dir = new QDir;
QString path = dir->currentPath();//按新建文件夹默认路径作为当前路径
delete dir;

4.2 foreach遍历QFileInfoList和双层for循环拼接文件名速度比较

循环里不加读取Mat时,双层for循环更快。
循环里加读取Mat时,双层for循环所用时间约为1.5倍。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值