zoukankan      html  css  js  c++  java
  • Qt中文件操作遇到的(变量,容器,结构体)

    咳咳!总结了一下我在使用QT文件操作时所用到的,再接再厉!再接再厉!!

    1.保存到文件:

      QFile file("test.txt");

      if (!file.open(QIODevice::WriteOnly);)

       {

           QMessageBox::warning(NULL, tr("保存文件"),

                                tr("无法读取文件 %1")

                                .arg(file.errorString()));

       }

      QDataStream out(&file);

      out.setVersion(QDataStream::Qt_4_3);

      /***************************如果保存变量***************************/

      QString sName;

      Int iAge;

      out << sName << iAge;

      /************************如果保存容器(如QMap)*******************/

      QMap<int, QString> map;

      map.insert(0, "name1");

      map.insert(1, "name2");

      map.insert(2, "name3");

      out << map;

      /***************************如果保存结构体**************************/

      typedef struct student

      {

         QString name;

         Int age;

         Int no;

      }STUDENT_MESSAGE;

      STUDENT_MESSAGE stuMsg;

      Out << stuMsg.name << stuMsg.age << stuMsg.no;

      /*******************************************************************/

      file.close();

    2.从文件读取:

      QFile file("test.txt");

       if (!file.open(QIODevice::ReadWrite))

       {

           QMessageBox::warning(NULL, tr("读取文件"),

                                tr("无法读取文件 %1")

                                .arg(filePro.errorString()));

       }

       QDataStream in(&file);

       in.setVersion(QDataStream::Qt_4_3);

       /************************************* 读取变量 *************************************/

       QString sName;

       Int iAge;

       in >> sName >> iAge;

       /******************************* 读取容器(如QMap) *******************************/

       QMap<int, QString>::const_iterator i = map->constBegin();

       QString name1,name2,name3;

       while (i != map->constEnd())

       {

    Switch(i.key())

    {

            Case 0:name1= i.value();

            Case 1:name2= i.value();

            Case 2:name3= i.value();

    }        

    ++i;

        }

       /************************************************************************************/

       file.close();

    3.判断所选路径下文件是否存在  

     int MainWindow::treefile( QString filePath)

     {

        QDir dir(filePath);

        if (!dir.exists())

        {

            return -1;

        }

        //取到所有的文件和文件名,但是去掉.和..的文件夹(这是QT默认有的)

        dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot);

        //文件夹优先

        dir.setSorting(QDir::DirsFirst);

        //转化成一个list

        QFileInfoList list = dir.entryInfoList();

        if(list.size()< 1 )

        {

            return -1;

        }

        int i=0;

        //递归算法的核心部分

    do

    {

            QFileInfo fileInfo = list.at(i);

            QString path = fileInfo.absolutePath();//获取一个绝对路径(不包括文件名)

            //如果是文件夹,递归

            bool bisDir = fileInfo.isDir();

            if(bisDir)

            {

               treefile(fileInfo.filePath());

            }

          else

          {

              if(fileInfo.fileName() == "test.txt") //找到搜索文件(比如你要找一个test.txt文件)

              {

                  //这里做你想做的

              }

          }

          i++;

       } while(i < list.size());

    }

    4.删除指定路径下的文件夹

      bool MainWindow::deleteDir(const QString dirName)

      {

           QDir directory(dirName);

           if (!directory.exists())

           {

                 return true;

           }

           QStringList files = directory.entryList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);

           QList<QString>::iterator f = files.begin();

           bool error = false;

           for (; f != files.end(); ++f)

           {

                   QString filePath = QDir::convertSeparators(directory.path() + '/' + (*f));

                   QFileInfo fi(filePath);

                   if (fi.isFile() || fi.isSymLink())

                   {

                           QFile::setPermissions(filePath, QFile::WriteOwner);

                           if (!QFile::remove(filePath))

                           {

                                   error = true;

                           }

                   }

                   else if (fi.isDir())

                   {

                           if (!deleteDir(filePath));

                           {

                                   error = true;

                           }

                   }

           }

           if(!directory.rmdir(QDir::convertSeparators(directory.path())))

           {

                   error = true;

           }

           return !error;

    }

    http://blog.csdn.net/mingxia_sui/article/details/7682549

  • 相关阅读:
    javascript验证QQ号、邮箱和手机号码
    js 引擎 和 html 渲染引擎
    ASP.NET MVC 4 简介
    SqlDateTime overflow / SqlDateTime 溢出
    ASP.NET MVC ViewBag/ViewData/TempData区别
    C#内存分配
    Repeater数据绑定和操作
    Uploadify导致Chrome频繁崩溃Crash
    巧用Ajax的beforeSend 提高用户体验
    ASP.NET MVC
  • 原文地址:https://www.cnblogs.com/findumars/p/5553991.html
Copyright © 2011-2022 走看看