Qt 文件和文件夹操作

  • 复制文件
  • 设置文件的访问权限
  • 删除文件
    • 删除单个文件
    • 批量删除文件
    • 示例
  • 获取文件信息
    • 批量修改文件名
  • 写文本文件
  • 读文本文件
  • 压缩和解压缩文件
    • 解压
    • 压缩
  • XML 文件读写
  • 注册表文件读写

资源:

Qt 帮助文档
Qt 5.9 c++开发指南 第七章

复制文件

bool QFile::copy(const QString &newName)
[static] bool QFile::copy(const QString &fileName, const QString &newName)

//设置工作目录
bool ret1 = QDir::setCurrent("D:/2"); //true
//将 D:/2/1.txt 复制到 D:/2 中更名为 2.txt
bool ret2 = QFile::copy("1.txt", "2.txt"); //true
bool ret3 = QFile::copy("1.txt", "1/2.txt"); //true 存在文件夹 1,1 中无 2.txt
//如果新文件的路径不存在,则失败,不能创建路径
bool ret4 = QFile::copy("1.txt", "1/11/1.txt"); //false 不存在 11 子文件夹
//如果已有同名的文件,则失败,不能覆盖
bool ret5 = QFile::copy("1.txt", "1/3.txt"); //false 1 子文件夹中存在 3.txt//创建文件,路径为相对路径,绝对路径为 D:/2/2.txt
QFile file1("2.txt");
//file1.setFileName("2.txt"); // 设置文件名称,路径为相对路径,和上面一样
bool ret6 = file1.copy("2/2.txt"); //true 将 D:/2/2.txt 复制到 D:/2/2 文件夹,名字仍为 2.txt

设置文件的访问权限

用户账户的介绍见 :

Windows 10 技术与应用大全 宋翔

使用函数:

[static] bool QFile::setPermissions(const QString &fileName, QFileDevice::Permissions permissions)

QFile file("D:/2/2.txt");
file.setPermissions(QFile::ReadOwner|QFile::WriteOwner|QFile::ExeOwner);

删除文件

删除单个文件

bool QFile::remove()
[static] bool QFile::remove(const QString &fileName)
bool QDir::remove(const QString &fileName)

批量删除文件

bool QDir::removeRecursively()

示例

bool ret1 = QDir::setCurrent("D:/2"); //true
QFile file1("2.txt");
//删除文件
bool ret7 = file1.remove(); //true//1.txt 处于打开状态也删除,目录中无,但打开的文件还存在
bool ret8 = QFile::remove("1.txt"); //true QDir dir(QDir::current());
bool ret9 = dir.remove("3.txt"); //truedir.setPath("1"); //相对路径
QString  strPath = dir.path(); // 相对路径为 1, 绝对路径为 D:/2/1// D:/2 的子文件夹 1 全部删除,包括里面所有的子目录和文件
bool ret10 = dir.removeRecursively();  //true

获取文件信息

QFileInfo

批量修改文件名

例如一个文件夹中的文件格式为 : a_b_1.png,其中第三部分数字递增,现在需要批量修改该格式中的第二部分为 c ,示例代码如下:

QString strPath("D:/1");
QString strPathNew("D:/new");
QDir dirNew;
dirNew.mkpath(strPathNew);
QString strSplit("_");//获取全部选中的文件
QStringList strListFiles = QFileDialog::getOpenFileNames(this, "Select Files",strPath, "Images(*.png)");for (QString &strFile : strListFiles)
{QFile file(strFile);QFileInfo fileInfo(file);QString strFileName(fileInfo.fileName()); //文件名QStringList strList = strFileName.split(strSplit);if (strList.size() < 3)continue;//查找文件格式为 a_b_num.png 的文件 num 为数字//最后一部分内容QString strLastPart = strList.at(2).split(".").first();//如果最后一部分只能是数字bool ok = false;strLastPart.toInt(&ok); //如果是纯十进制数字,则 ok = true//如果最后一部分格式为包含数字,也可以含其他字符//ok = strLastPart.contains(QRegExp("[0-9]"));//替换中间的字母if (strList.at(0) == "a" && strList.at(1) == "b" && ok){strFileName.replace(str.indexOf("b"), 1, "c");}QFile::copy(strFile, strPathNew + "/" + strFileName);
}

写文本文件

void MyFile::writeFile(const QStringList &strListData)
{QFile file("D:/LP/Test/data/samp1.txt");if (!file.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Truncate)){return;}QTextStream dataStream(&file);dataStream << QString::fromLocal8Bit("***** 中文注释 *****")<< "\n";dataStream << "a" << "b " << "c";file.close();
}

读文本文件

QFile file("D:/LP/Test/data/samp1.txt");
if (!file.open(QIODevice::ReadOnly| QIODevice::Text)
{return;
}//读的文本中含中文
QTextStream textStream(&file);
textStream.setCodec("GBK");//跳过开头的空白行和含有 ** 的注释行
while (!textStream.atEnd())
{int pos = textStream.pos();QString strLine = textStream.readLine();if (strLine.simplified().isEmpty() || strLine.contains(QString("**"))continue;qDebug() << "pos: " << textStream.pos();qDebug() << "line 1: " << strLine ;break;
}//回到起始位置 读取全部行
textStream.seek(0);
QStringList strList;while (!textStream2.atEnd())
{strList << textStream.readLine();
}file.close();

压缩和解压缩文件

How can I compress (/ zip ) and uncompress (/ unzip ) files and folders with batch file without using any external tools?

压缩解压用到的脚本为 zipjs.bat。
压缩文件夹使用的方法:Using Shell.Application。
脚本调用语法:在命令行窗口定位到脚本所在的目录后,输入zipjs.bat,会有帮助文档说明。

该脚本文件放在 D:/2 文件夹中。

解压

解压 .zip 文件:

void readWriteFile::unzipFile()
{QString strTemFile("D:\\2\\tem.bat"); //调用 zipjs.bat 的脚本QString strBatFile("D:\\2\\zipjs.bat");QString strSrcFilePath("D:\\2\\1.zip");QString strDesPath("D:\\2\\4");QFile file(strTemFile);if (file.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Truncate)){QTextStream stream(&file);stream << "@echo off" << "\n"<< "call" << strBatFile << " unzip -source " << strSrcFilePath << " -destination " << strDesPath << " -keep yes -force yes" << "\n";file.close();QProcess process(NULL);process.setWorkingDirectory("D:/2");process.start(strTemFile);if (process.waitForFinished(1800000)){file.close();file.remove();qDebug() << "finished!";}}
}

压缩

将文件夹压缩为.zip格式且不使用外部压缩工具。

修改脚本执行命令:

QString strSrcFilePath("D:\\2\\1");
QString strDesPath("D:\\2\\4.zip");
stream << "@echo off" << "\n"<< "call" << strBatFile << " zipDirItem -source " << strSrcFilePath << " -destination " << strDesPath << " -keep yes -force yes" << "\n";

XML 文件读写

Qt 读写 xml 文件

注册表文件读写

工程文件中加下面库:

LIBS += User32.lib
LIBS += Ole32.lib
#include <QMainWindow>
#include <QWidget>
#include <QFile>
#include <QDebug>
#include <msctf.h>
#include <WinUser.h>
#include <combaseapi.h>void MainWindow::setKeyboard()
{//找到默认输入法的 guidQSettings reg("HKEY_CURRENT_USER\\Software\\Microsoft\\CTF\\Assemblies\\0x00000804\\{34745C63-B2F0-4784-8B67-5E12C8701A31}",QSettings::NativeFormat);bool ok;QString strGuidProfiles = reg.value("Profile").toString();LANGID langid = QString("0x00000804").toUShort(&ok, 16); //2052REFGUID guidProfiles = QUuid(strGuidProfiles);//查找 CLSIDQSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\CTF\\SortOrder\\AssemblyItem\\0x00000804\\{34745C63-B2F0-4784-8B67-5E12C8701A31}",QSettings::NativeFormat);QStringList strListGroup = settings.childGroups();QString strRclsid("");for (QString &strGroup : strListGroup){settings.beginGroup(strGroup);if (settings.value("Profile").toString() == strGuidProfiles){strRclsid = settings.value("CLSID").toString();break;}settings.endGroup();}REFCLSID rclsid = QUuid(strRclsid);HRESULT hr;ITfInputProcessorProfiles *pProfiles;hr = CoCreateInstance(  CLSID_TF_InputProcessorProfiles,NULL,CLSCTX_INPROC_SERVER,IID_ITfInputProcessorProfiles,(LPVOID*)&pProfiles);if(SUCCEEDED(hr)){if (pProfiles->SetDefaultLanguageProfile(langid, rclsid, guidProfiles) != S_OK)qDebug("Failed to load default language profile.");if (pProfiles->ActivateLanguageProfile(rclsid, langid, guidProfiles) != S_OK)qDebug("Failed to active language profile.");pProfiles->Release();}//设置默认设置QSettings regSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\InputMethod\\Settings\\CHS",QSettings::NativeFormat);regSettings.setValue("Default Mode", 0); //输入法默认模式(Default Mode)设置 中文(0) (英文为1)regSettings.setValue("Output CharSet", 0); //字符集 简体中文(0) (繁体为1)}

Qt 文件和文件夹操作相关推荐

  1. QT选择目录等常用文件/文件夹操作

    QT 创建文件夹 bool QDir::mkdir ( const QString & dirName ) const 创建一个子目录名为目录名.[喝小酒的网摘]http://blog.heh ...

  2. Qt删除文件和文件夹

    在使用电脑的时候,有时候我们需要删除文件和文件夹,手动操作一个一个的删除就比较麻烦,有时候某个特定的文件还删除不了,写一个程序来实现删除功能就方便很多,Qt里就有自带的类可以方便的执行删除功能,下面来 ...

  3. 七、PyQt5文件及文件夹操作(高级应用篇)

    三.高级应用 该部分包括文件及文件夹操作.PyQt5绘图技术.多线程编程.PyQt5程序的打包发布.学完这一部分,能够开发文件流程序.图形图像程序.多线程应用程序等,能够对PyQt5程序进行打包. ( ...

  4. qt上传文件到iis文件服务器,一篇文章快速搞懂Qt文件读写操作

    导读:Qt当中使用QFile类对文件进行读写操作,对文本文件也可以与QTextStream一起使用,这样读写操作会更加简便.QFileInfo可以用来获取文件的信息.QDir可以用于对文件夹进行操作. ...

  5. 纯C++操作文件和文件夹的工具类

    前言 一般涉及到文件和文件夹的操作的时候,要么使用Qt的QFile或者QDir类,要么使用别的库.但是当我们的程序不想包含太多太杂的库的时候,对于文件夹的操作就不那么容易了.因此,为解决这个问题,本文 ...

  6. Bash 文件夹操作

    mkdir, rm,find都是对tree结构的文件夹进行的操作,可以安装tree用tree命令直接打印出树的结构 文件夹的操作分为只操作当前文件夹的集合数据和迭代操作的tree数据 Bash迭代当前 ...

  7. python中对文件、文件夹(文件操作函数)的操作

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

  8. C++ :常用文件、文件夹操作汇总

    文件.文件夹操作 1.创建文件夹 2.创建文件 3.删除文件 4.删除文件夹 5.删除一个目录下所有的文件夹 6.清空文件夹 7.读取文件 8.写入文件 9.写入随机文件 10.读取文件属性 11.写 ...

  9. php文件域的作用,PHP作用域和文件夹操作示例

    1.作用域 1.1变量作用域 1.全局变量:在函数外面 2.局部变量:在函数里面,默认情况下,函数内部是不会访问函数外部的变量 3.超全局变量:可以在函数内部和函数外部访问 在函数内部访问全局变量&l ...

最新文章

  1. php返回结果判断,老司机在判断返回结果时翻了个身(ThinkPHP)
  2. mvc-3模型和数据(1)
  3. 构建之法阅读笔记01
  4. SUID和SGID位简介
  5. 与粉丝们互动,街头霸王乐队带来AR应用《Gorillaz》
  6. OPA 11 - how is check called in my iClickTheCreateButton
  7. JAVA的值传递问题
  8. OpenShift 4 - Pod的亲和性/反亲和性
  9. C语言程序所以,C语言程序(1)
  10. android二级菜单ui,巧用PopupMenu实现NavigationView的二级子菜单
  11. C++ 类的隐式转换之基本数据类型
  12. 相关滤波之开篇Mosse原理及代码详解
  13. 【计算机网络】HTTP协议详解
  14. amr转换成mp3 java_微信开发-将amr格式转换为mp3格式
  15. IE主页被篡改,修改“Internet 选项”也无法解决时的解决方法
  16. Python自动化测试框架,谁才是你的唯一?
  17. MySQL(零基础)详解之DQL
  18. JavaScript:100以内质数1000以内的质数显示和统计
  19. 5 个有效好用的恢复文件和照片的 Android恢复软件推荐
  20. 80秒验证13亿个身份证号码,包含省市县验证

热门文章

  1. STM32学习记录——光敏传感器的使用
  2. 米4用linux刷机救转,小米4线刷刷机教程_小米4第三方rom包_救砖系统刷机包下载...
  3. 付出就有回报,坚持才会胜利
  4. 用友笔试题java_用友面试题(Java)
  5. C语言的本质——C标准库之字符串操作
  6. FPGA的HDMI字符显示,图像采集叠加时钟显示
  7. linux安装rvm,RVM 简易使用教程
  8. signature=b0e0b3f7d0e5b4c008c798d95174dc8e,高清剧场
  9. 【算法】 通过苏格拉底麦穗理论(最优停时)来研究爱情
  10. 小米手机怎么弄音乐计算机键盘,IT教程:小米键盘设置在哪里