• QT文件操作-遍历


    QT的路径格式使用 / 或 \

    读写文本

     1     //写文本
     2     QFile f("F:/src/1.txt");
     3     if(!f.open(QIODevice::WriteOnly | QIODevice::Text))
     4     {
     5         qDebug() << "Open failed." << endl;
     6     }
     7 
     8     QTextStream txtOutput(&f);
     9     QString s1("123");
    10     quint32 n1(123);
    11 
    12     txtOutput << s1 << endl;
    13     txtOutput << n1 << endl;
    14 
    15     f.close();
    16 
    17 
    18    //读文本
    19     QFile f("F:/src/1.txt");
    20     if(!f.open(QIODevice::ReadOnly | QIODevice::Text))
    21     {
    22         qDebug() << "Open failed." << endl;
    23     }
    24 
    25     QTextStream txtInput(&f);
    26     QString lineStr;
    27     while(!txtInput.atEnd())
    28     {
    29         lineStr = txtInput.readLine();
    30         qDebug() << lineStr << endl;
    31     }
    32 
    33     f.close();

    查找路径下所有特定文件(和文件夹)

     1 void fllemanage::on_pushButton_clicked()
     2 {
     3     //    int count = 0;
     4     //    QString dirpath = "C:/Users/00/Desktop/git clone/OpenCV-Python-Tutorial/.idea";
     5     //    //设置要遍历的目录
     6     //    QDir dir(dirpath);
     7     //    qDebug()<<dirpath<<endl;
     8     //    //设置文件过滤器
     9     //    QStringList nameFilters;
    10     //    //设置文件过滤格式
    11     //    nameFilters << "*.xml";
    12     //    dir.setNameFilters(nameFilters);
    13     //    qDebug()<<dir.entryList()<<endl;
    14     //    qDebug()<<dir.entryInfoList()<<endl;
    15     //    //将过滤后的文件名称存入到files列表中
    16     //    QStringList files = dir.entryList(nameFilters, QDir::Files|QDir::Readable, QDir::Name);
    17     //    for(int i = 0; i<files.size(); i++)
    18     //    {
    19     //        qDebug()<<"now, it's output from QStringlist"<<endl;
    20     //        qDebug()<<files[i]<<endl;
    21     //    }
    22 
    23     QStringList list = findALLfiles("C:/Users/00/Desktop/vsrun/123");
    24     //QStringList list = findALLfiles("C:/Users/00/Desktop/vsrun");
    25     //for(int i = 0 ; i <list.size(); i++)
    26       //qDebug() <<list[i]<<endl;
    27     QStringList purposelist;
    28     purposelist = list.filter(".txt");
    29     int count = 0;
    30     for (int i = 0; i < purposelist.size(); i++)
    31     {
    32         qDebug() << purposelist[i] << endl;
    33         count++;
    34     }
    35     qDebug() << "the max file has " << list.size() << endl;
    36     qDebug() << "the purpose file has " << count << endl;
    37 
    38     //新建文件夹(目标文件保存的位置)
    39 //     QDir dir("C:/Users/00/Desktop/vsrun");
    40 //     if(!dir.exists("copy to here")){
    41 //         dir.mkdir("copy to here");
    42 //     }
    43     QString toDir = "C:/Users/00/Desktop/123";
    44     //toDir.replace("\","/");
    45 
    46     QDir dir(toDir);
    47     if (!dir.exists(toDir)) {
    48         dir.mkdir(toDir);
    49     }
    50 
    51     QFile destFile(toDir);
    52     bool success = true;
    53     success &= destFile.open(QFile::WriteOnly | QFile::Truncate);
    54 
    55     for (int i = 0; i < purposelist.size(); i++)
    56     {
    57         if (QFile::copy(purposelist[i], toDir)) {  //将文件复制到新的文件路径下
    58             {//QFile::copy(purposelist[i],toDir);
    59                 qDebug() << QStringLiteral("复制成功");
    60             }
    61         }
    62     }
    63 }
    64 
    65 //迭代器遍历所有文件并返回
    66 QStringList fllemanage::findALLfiles(const QString &dir_path) {
    67     QStringList get_files;
    68     QDir dir(dir_path);
    69     if (!dir.exists())
    70     {
    71         qDebug() << "it is not true dir_path";
    72     }
    73 
    74     /*设置过滤参数,QDir::NoDotAndDotDot表示不会去遍历上层目录*/
    75     QDirIterator dir_iterator(dir_path, QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
    76 
    77     while (dir_iterator.hasNext())
    78     {
    79         dir_iterator.next();
    80         QFileInfo file_info = dir_iterator.fileInfo();
    81         QString files = file_info.absoluteFilePath();
    82         get_files.append(files);
    83     }
    84 
    85     return get_files;
    86 }

    QFile copy(报错未实现 QIodevce not opened) 

        //    copy测试!!!!!!
        //    QFile src("F:/src");
        //    QFile dst("F:/dst");
    
        //    bool success = true;
        //    success &= src.open( QFile::ReadOnly );
        //    success &= dst.open( QFile::WriteOnly | QFile::Truncate );
        //    success &= dst.write( src.readAll() ) >= 0;
    
        //   QFile::copy("F:/src/1.txt" , "F:/dst");
        //    src.close();
        //    dst.close();

    更新:QFile copy 函数写法:

    QFile::copy("F:/src/1.txt" , "F:/dst/2.txt");  //(具体文件名 to 具体文件名)


    copy函数不能对string类型的路径进行操作,可从QString转string操作再转QString:
    
    
    
            std::string pur = purposelist[i].toStdString();//都转换为string
           // qDebug()<<pur<<endl;
            std::string sdir = toDir.toStdString();
            int pos = pur.find_last_of('/'); //找到最后/
            std::string s(pur.substr(pos+1));
            sdir.append("/");
            sdir.append(s);
            QString qsdir = QString(QString::fromLocal8Bit(sdir.c_str()));
            qDebug()<<qsdir<<endl;
     
  • 相关阅读:
    Redis系列(八)--缓存穿透、雪崩、更新策略
    Vue在单独引入js文件中使用ElementUI的组件
    解读浮动闭合最佳方案:clearfix
    JS replace()方法替换变量(可以对变量进行全文替换)
    Django media的设置
    使用EventBus实现兄弟组件之间的通信
    component: resolve => require(['../pages/home.vue'], resolve)
    vue中使用localStorage存储信息
    使用vue-router beforEach实现判断用户登录跳转路由筛选功能
    ES6使用常量做为函数名
  • 原文地址:https://www.cnblogs.com/qianxunslimg/p/13726884.html
Copyright © 2020-2023  润新知