• Qt 文件处理


    1.删除目录下所有的文件 

    void deleteAllFiles(const QString& fileDir)
    {
       
        
        QDir dir(fileDir);
        if(!dir.exists())
        {
            return;
        }
        
        QFileInfoList fileInfofList=dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot | QDir::NoSymLinks | QDir::AllDirs);
        
        foreach (QFileInfo fileInfo, fileInfofList) 
        {
            if(fileInfo.isDir())
            {
               deleteAllFiles(fileInfo.absoluteFilePath()); 
            }
            else if(fileInfo.isFile())
            {
                QFile file(fileInfo.absoluteFilePath());
                file.remove();
            }
                
            
        }
       
        QDir tempDir;
        tempDir.rmdir(fileDir);//删除空的目录
    }

    删除超过多长时间的旧文件。toTime_t() 秒

    const int OVERTIME=60*60*24*30;
    void MainWindow::deleteOldFile(QString fileDir)
    {
        QDir dir(fileDir);
        if(dir.exists())
        {
            dir.setFilter(QDir::Files | QDir::NoSymLinks);
            QDateTime nowDateTime = QDateTime::currentDateTime();
            QFileInfoList list = dir.entryInfoList();
            for (int i = 0; i < list.size(); ++i)
            {
                QFileInfo fileInfo = list.at(i);
                //
                int passTime=nowDateTime.toTime_t()-fileInfo.created().toTime_t();
                if(passTime>OVERTIME)
                {
                    QFile file(fileInfo.absoluteFilePath());
                    file.remove();
                }
                
    
            }
        }
    }
     QString fileDir="/home/likewei/公共的/dispatch_log";
     deleteOldFile(fileDir);

    2.读文件 

     QFile file(yamlFile);
        if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
            log::d("yamle open file fail!");
            return false;
        }
    
        QTextStream in(&file);
        while (!in.atEnd()) {
            QString line = in.readLine();
            log::d(line);
        }
        file.close ();

    2.QWidgetList导出excel

    void ReportDlg::onExport()
    {
    
         QString file_path = QFileDialog::getSaveFileName(this,"Excel file",qApp->applicationDirPath(),
                                                           tr("Files (*.csv)"));
    
    
           if(file_path.isEmpty())
           {
               return;
           }
    
           QFile file(file_path);
           if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
           {
                qDebug()<< "Cannot open file for writing";
    
                return;
           }
    
           QTextStream out(&file);
           int row_count=tw->rowCount();
           int col_count=tw->columnCount();
           QString tw_value;
    
    
           for(int h=0;h<col_count;h++)
           {
    
               tw_value=tw->horizontalHeaderItem(h)->text();
               out<<tw_value<<",";
           }
           out<<"
    ";
           for(int i=0;i<row_count;i++)
           {
    
               for(int j=0;j<col_count;j++)
               {
    
                   tw_value=tw->item(i,j)->text();
                   out<<tw_value<<",";
               }
               out<<"
    ";
           }
    
           file.close();
    
    
    }

     3.记录错误信息,每天用新的文件记录信息,以防止记录的信息太多。

    void MainWindow::log(QString msg)
    {
    
        QString fileName=QDateTime::currentDateTime ().toString ("yyyy_MM_dd")+".log";
        QString currentDir= QCoreApplication::applicationDirPath()+"/logs";
    
        QDir dir;
        if(!dir.exists (currentDir))
        {
            dir.mkpath (currentDir);
        }
        fileName=currentDir+"/"+fileName;
    
        QFile file(fileName);
        if(!file.exists (fileName))
        {
            file.setFileName (fileName);
        }
        file.open(QIODevice::WriteOnly|QFile::Append);
        QTextStream in(&file);  
        in<<QDateTime::currentDateTime ().toString ("[hh:mm:ss:zzz]")+" "+msg+"
    ";
        file.close ();
    
    }

     4.选择文件对话框

     QString defaultDir=QCoreApplication::applicationDirPath()+"/data";
        QString fileName= QFileDialog::getOpenFileName(
                    this,
                    "Import File",
                    defaultDir,
                    "file (*.txt *.bin);;all files (*.*)");
        if(!fileName.isEmpty())
        {
           emit sigImportFile(fileName);
        }

    5.在指定的目录查找指定的文件

     QString binFileDir=QCoreApplication::applicationDirPath()+"/file";
        QDir *dir=new QDir(binFileDir);
        if(!dir->exists())
        {
            qDebug()<<"no found dir";
            return -1;
        }
    
        //只查找设置过滤的文件,指定多个过滤,这样写filter<<"*.dat"<<"*.txt
        QStringList filter;
        filter<<"*.bin";
        dir->setNameFilters(filter);
        QList<QFileInfo> *fileInfo=new QList<QFileInfo>(dir->entryInfoList(filter));
        int fileCount=fileInfo->count();
        qDebug()<<"fileCount"<<fileCount;
        for(int i=0;i<fileCount;i++)
        {
            qDebug()<<"fileName:"<<fileInfo->at(i).fileName();
            qDebug()<<"filePath:"<<fileInfo->at(i).filePath();
    
        }
  • 相关阅读:
    C#程序调试
    jsp连接sql数据库
    SQL记录
    对于和/的小问题:证明路径中可以混合使用斜杠和反斜杠
    集合初识
    details.jsp页面的 response.addCookie(cookie);报错&tomcat高版本下的Cookie问题
    sql查询操作—顺序查询
    myeclipse使用Microsoft JDBC Driver 6.0 for SQL Server连接sql
    JavaScript、Java、C#关于for循环的比较
    关于jsp动作元素的一点疑惑
  • 原文地址:https://www.cnblogs.com/ike_li/p/5112049.html
Copyright © 2020-2023  润新知