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

posted @   findumars  Views(6476)  Comments(0Edit  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2015-06-02 发现一个好的开源项目:lomoX(挑着看,每天看一点,看一年就ok了)——用Webkit开发桌面软件,炫
点击右上角即可分享
微信分享提示