2. QT中实现文件夹/文件的相关操作

1. 说明

对于文件或者文件夹,主要的操作包括新建、删除或者修改,在Qt当中主要使用的类包括QFile、QDir、QFileInfoList、QFileInfo等。

文件夹操作

在创建或者删除文件夹时,使用到的类主要为 QDir,基本使用如下,详细解释请看注释:
创建新文件夹

QString dirPath = "../"
QString dirName = "testDir";
QString path = dirPath + dirName;
//使用QDir的构造函数
QDir dir(path );
if(!dir.exists()){	//如果当前文件夹不存在
	dir.mkdir(path);	//创建新的文件夹
}

删除文件夹:
在文件夹删除时,有两种方式:
第一种:使用 removeRecursively() 方法,这种方法不管文件夹内是否有内容,都可直接删除

dir.removeRecursively(path);

第二种:遍历删除

bool DelDir(const QString &path)
{
    if (path.isEmpty()){
        return false;
    }
    QDir dir(path);
    if(!dir.exists()){
        return true;
    }
    dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); //设置过滤
    QFileInfoList fileList = dir.entryInfoList(); // 获取所有的文件信息
    foreach (QFileInfo file, fileList){ //遍历文件信息
        if (file.isFile()){ // 是文件,删除
            file.dir().remove(file.fileName());
        }else{ // 是文件夹,递归删除
            DelDir(file.absoluteFilePath());
        }
    }
    return dir.rmdir(dir.absolutePath()); // 删除文件夹(仅删除指定路径的文件夹,对于父文件夹不进行操作)
    //return dir.rmpath(dir.absolutePath()); // 删除文件夹,若父文件夹为空,则同时删除父文件夹(一般不使用这个)
}
文件操作

创建新文件

void MyFile::createNewFile()
{
    QDir dir(path);		// path为文件要储存的路径
    if(!dir.exists()){
        qDebug()<<"当前文件夹不存在";
    }
    QString fileName = "/testFile.txt";

    QString filePath = path + fileName;

    QFile file(filePath);   //若文件不存在,默认会在当前文件夹下创建一个文件

    if(file.open(QFile::ReadWrite)){
        file.close();
    }
}

删除指定文件

void MyFile::deleteCurFile()
{
    QDir dir(path);		// path为文件要储存的路径
    if(!dir.exists()){
        qDebug()<<"当前文件夹不存在";
    }
    QString fileName = "/testFile.txt";

    QString filePath = path + fileName;

    dir.remove(filePath);	// 删除指定文件(所需参数为文件的路径)
}

获取文件夹中或者文件信息

void MyFile::getInfoInCurDir()
{
    QDir dir(path);
    if(!dir.exists()){
        qDebug()<<"当前文件夹不存在";
    }
    //获取指定文件夹中的信息,每一条信息都是一个QFileInfo,保存在一个List中返回
    QFileInfoList fileList = dir.entryInfoList();
    
    foreach (QFileInfo file, fileList) {
        qDebug()<<file.filePath();//获取文件相对路径
        qDebug()<<file.absoluteFilePath();//获取文件绝对路径
        qDebug()<<file.suffix();//获取文件后缀类型
        qDebug()<<file.dir();//获取文件的dir信息
        qDebug()<<file.fileName();//获取文件名称
        if(file.isFile()){
            qDebug()<<"此类型是文件...";
        }
        if(file.isDir()){
            qDebug()<<"此类型是文件夹...";
        }
    }
}

在指定文件中添加内容

void MyFile::changeInfoInCurFile()
{
    QDir dir(path);
    if(!dir.exists()){
        qDebug()<<"当前文件夹不存在";
    }
    QString fileName = "/testFile.txt";

    QString filePath = path + fileName;

    QFile file(filePath);   //若文件不存在,默认会在当前文件夹下创建一个文件

    if(file.open(QIODevice::Append)){    //以追加的模式打开文件
        QTextStream textStream(&file);
        textStream.setCodec("UTF-8");

        textStream<<QString("这是追加的数据\n");  //以文本流的方式写入数据
        file.close();
    }
}

读取文件内容

void MyFile::changeInfoInCurFile()
{
    QDir dir(path);
    if(!dir.exists()){
        qDebug()<<"当前文件夹不存在";
    }
    QString fileName = "/testFile.txt";

    QString filePath = path + fileName;

    QFile file(filePath);   //若文件不存在,默认会在当前文件夹下创建一个文件

    if(file.open(QIODevice::ReadWrite)){    //以读写模式打开文件
        QTextStream textStream(&file);
        textStream.setCodec("UTF-8");

        textStream<<QString("这是追加的数据\n");  //以文本流的方式写入数据
        file.close();
    }
}

如果是二进制文件,可把上面的QTextStream换成QDataStream,并将textStream.setCodec(“UTF-8”)去掉即可。
二进制文件在读取时,也需要进行类型转换,如果读取结果保存在str中,则需进行str.toUtf8()转换。

持续更新中,请大家多多关注…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

山间点烟雨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值