• Qt判断文件夹路径、文件是否存在不存在则创建



    Chapter1 Qt判断文件夹路径、文件是否存在不存在则创建

    原文链接:https://blog.csdn.net/yao_hou/article/details/121389476

    Qt判断文件夹/目录是否存在

    Qt判断文件夹/目录是否存在,可以使用QDir类的exists方法来判断,在使用时需要包含头文件#include ,例如下面的代码:

    #include 
    #include 
    #include 
    
    ///
    /// \brief 判断文件夹是否存在,不存在则创建
    /// \param fullPath
    /// \return
    ///
    bool DirExist(QString fullPath)
    {
        QDir dir(fullPath);
        if(dir.exists())
        {
            //存在当前文件夹
            return true;
        }
        else
        {
            //不存在则创建
            bool ok = dir.mkdir(fullPath); //只创建一级子目录,即必须保证上级目录存在
            return ok;
        }
    }
    
    ///
    /// \brief 判断文件夹是否存在,不存在则创建, 可创建多级目录
    /// \param fullPath
    /// \return
    ///
    bool DirExistEx(QString fullPath)
    {
        QDir dir(fullPath);
        if(dir.exists())
        {
            return true;
        }
        else
        {
            //不存在当前目录,创建,可创建多级目录
            bool ok = dir.mkpath(fullPath);
            return ok;
        }
    }
    
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        bool isOk = DirExist("D:/1234");
        qDebug() << isOk;
    
        isOk = DirExistEx("D:/1/2/3");
        qDebug() << isOk;
    
        return a.exec();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • DirExist函数,判断文件夹是否存在,不存在则创建
    • DirExistEx函数,判断文件夹是否存在,不存在则创建, 可创建多级目录

    二者的区别是创建文件夹调用的方法不同

    • QDir mkdir :创建一个目录(文件夹/路径)
    • QDir mkpath : 创建多级目录

    Qt判断文件是否存在

    代码如下:

    #include 
    #include 
    #include 
    
    ///
    /// \brief 判断文件是否存在,不存在则创建该文件
    /// \param fullFileName
    /// \return
    ///
    bool FileExist(QString fullFileName)
    {
        QFile file(fullFileName);
    
        if(file.exists())
        {
            return true;
        }
        else
        {
            qDebug() << u8"文件不存在, 那就新建该文件";
            file.open( QIODevice::ReadWrite | QIODevice::Text );
    		
    		//注意关闭文件
            file.close();
        }
    
        return false;
    }
    
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        bool isOk = FileExist("D:/1234567.ini");  //Text类型可以创建txt,ini,json,xml等
        qDebug() << isOk;
    
        return a.exec();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    当文件不存在时,调用QFile的open方法也就是相当于创建了一个文件。

    Chapter2 Qt 判断文件或文件夹是否存在及创建文件夹

    原文链接:https://blog.csdn.net/lusirking/article/details/51644782

    1. 判断文件夹是不是存在

    参数说明:

    QString fullPath;//文件夹全路径
    /*方法1*/
    bool isDirExist(QString fullPath)
    {
        QDir dir(fullPath);
        if(dir.exists())
        {
          return true;
        }
        return false;
    }
    /*方法2*/
    bool isDirExist(QString fullPath)
    {
        QFileInfo fileInfo(fullPath);
        if(fileInfo.isDir())
        {
          return true;
        }
        return false;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2. 判断文件是不是存在

    参数说明:

    QString fullFileName;//文件全路径(包含文件名)
    /*方法1*/
    bool isFileExist(QString fullFileName)
    {
        QFileInfo fileInfo(fileFullName);
        if(fileInfo.isFile())
        {
            return true;
        }
        return false;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3、判断文件或文件夹是不是存在(即不确定字符串是文件还是文件夹路径)

    参数说明:

    QString fullFilePath;//路径名
    /*方法1*/
    bool isFileExist(QString fullFilePath)
    {
        QFileInfo fileInfo(fullFilePath);
        if(fileInfo.exists())
        {
            return true;
        }
        return false;
    }
    /*方法2*/
    bool isFileExist(QString fullFilePath)
    {
        QFile file(fullFilePath);
        if(file.exists())
        {
            return true;
        }
        return false;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4、判断文件夹是否存在,不存在则创建

    /*方法1*/
    bool isDirExist(QString fullPath)
    {
        QDir dir(fullPath);
        if(dir.exists())
        {
          return true;
        }
        else
        {
           bool ok = dir.mkdir(fullPath);//只创建一级子目录,即必须保证上级目录存在
           return ok;
        }
    }
    /*方法1*/
    bool isDirExist(QString fullPath)
    {
        QDir dir(fullPath);
        if(dir.exists())
        {
          return true;
        }
        else
        {
           bool ok = dir.mkpath(fullPath);//创建多级目录
           return ok;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    5、以下为摘录的其他网络测试代码

    {
        QFileInfo fi("C:/123");                     // 目录存在
        qDebug() << fi.isFile();                    // false
        qDebug() << fi.isDir();                     // true
        qDebug() << fi.exists();                    // true
        qDebug() << fi.isRoot();                    // false
        qDebug() << QFile::exists("C:/123");        // true
        qDebug() << QDir("C:/123").exists();        // true
    
        fi.setFile("C:/ABC");                       // 目录不存在
        qDebug() << fi.isFile();                    // false
        qDebug() << fi.isDir();                     // false
        qDebug() << fi.exists();                    // false
        qDebug() << fi.isRoot();                    // false
        qDebug() << QFile::exists("C:/ABC");        // false
        qDebug() << QDir("C:/ABC").exists();        // false
    
        fi.setFile("C:/");                          // 存在的驱动器
        qDebug() << fi.isFile();                    // false
        qDebug() << fi.isDir();                     // true
        qDebug() << fi.exists();                    // true
        qDebug() << fi.isRoot();                    // true
        qDebug() << QFile::exists("C:/");           // true
        qDebug() << QDir("C:/").exists();           // true
    
        fi.setFile("Z:/");                          // 不存在的驱动器
        qDebug() << fi.isFile();                    // false
        qDebug() << fi.isDir();                     // false
        qDebug() << fi.exists();                    // false
        qDebug() << fi.isRoot();                    // false
        qDebug() << QFile::exists("Z:/");           // false
        qDebug() << QDir("Z:/").exists();           // false
    
        fi.setFile("C:/123.lnk");                   // 快捷方式存在且指向的文件也存在
        qDebug() << fi.isFile();                    // true
        qDebug() << fi.isDir();                     // false
        qDebug() << fi.exists();                    // true
        qDebug() << fi.isRoot();                    // false
        qDebug() << QFile::exists("C:/123.lnk");    // true
        qDebug() << QDir("C:/123.lnk").exists();    // false
    
        fi.setFile("C:/456.lnk");                   // 快捷方式存在但指向的文件不存在
        qDebug() << fi.isFile();                    // false
        qDebug() << fi.isDir();                     // false
        qDebug() << fi.exists();                    // false
        qDebug() << fi.isRoot();                    // false
        qDebug() << QFile::exists("C:/456.lnk");    // false
        qDebug() << QDir("C:/456.lnk").exists();    // false
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    可以看到,容易让人感到混乱的是exists方法,这个方法是通用的判断方法,可以看成是这样的表达式
    exists() == (isFile() || isDir())

    也就是说判断文件或文件夹是否存在单纯用exists方法是不严谨的
    比如你的本意是判断文件是否存在,但文件不存在,而恰巧有个同名的文件夹,那么exists也会返回true。文件夹也是同理

    根据上面的代码作出的一点总结

    准确判断文件是否存在

    1.用QFileInfo::isFile()方法

    准确判断文件夹是否存在

    1.用QFileInfo::isDir()方法
    2.用QDir::exists()方法

    不确定字符串是文件还是文件夹路径

    1.用QFileInfo::exists()方法
    2.用QFile::exists()方法

  • 相关阅读:
    PaddleOCR服务部署-并通过Java进行调用
    计算机毕业设计之java+SSM酒店客房预定管理系统
    电商转化率这么抽象,到底是个啥?
    鸟哥的LInux私房菜 基础学习篇 第四版 学习笔记
    Ubuntu安装PyCharm
    大学生餐饮主题网页制作 美食网页设计模板 学生静态网页作业成品 dreamweaver美食甜品蛋糕HTML网站制作
    Java高级特性-泛型类
    JVM学习(三)--运行时数据区
    【数据结构与算法】初识二叉树(中)
    阿桑的感慨
  • 原文地址:https://blog.csdn.net/m0_46577050/article/details/133971628