Qt中文件操作遇到的(变量,容器,结构体)

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void writeFile();
    void readFile();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QFile>
#include<QMessageBox>
#include<QDebug>

typedef struct student
{
   QString name;
   int age;
   int no;
   student(){}
   student(QString name,int age,int no){
       this->name=name;
       this->age=age;
       this->no=no;
   }
}STUDENT_MESSAGE;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->actionRead, &QAction::triggered, this, &MainWindow::readFile);
    connect(ui->actionWrite, &QAction::triggered, this, &MainWindow::writeFile);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::readFile()
{
       //2.从文件读取:
       QFile file("test.txt");
       if (!file.open(QIODevice::ReadWrite))
       {
           QMessageBox::warning(NULL, tr("读取文件"),
                                tr("无法读取文件 %1").arg(file.errorString()));
       }
       QDataStream in(&file);
       in.setVersion(QDataStream::Qt_5_6);
       /************************************* 读取变量 *************************************/
       QString sName;
       int iAge;
       in >> sName >> iAge;
       qDebug()<<"Name:"<<sName<<",Age:"<<iAge;
       /******************************* 读取容器(如QMap) *******************************/
       QMap<int, QString> map;
       in >>map;
       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;
        }
       qDebug()<<"Name1:"<<name1<<"Name2:"<<name2<<"Name3:"<<name3;
       /************************************************************************************/

       STUDENT_MESSAGE stuMsg;
       in >>stuMsg.name>>stuMsg.age >> stuMsg.no;
       qDebug() << "stuMsg.name:"<<stuMsg.name <<",stuMsg.age:"<< stuMsg.age << ",stuMsg.no:"<<stuMsg.no;

       file.close();
       QMessageBox::about(this, tr("readFile"),
                tr("Read File Finished!"));
}

void MainWindow::writeFile()
{
     //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_5_6);
      /***************************如果保存变量***************************/

      QString sName="Jim Green";
      int iAge=17;
      out << sName << iAge;
      /************************如果保存容器(如QMap)*******************/
      QMap<int, QString> map;
      map.insert(0, "name1");
      map.insert(1, "name2");
      map.insert(2, "name3");
      out << map;
      /***************************如果保存结构体**************************/

      STUDENT_MESSAGE stuMsg("Tom Hanks",25,123454321);
      out << stuMsg.name << stuMsg.age << stuMsg.no;
      /*******************************************************************/
      file.close();
      QMessageBox::about(this, tr("writeFile"),
               tr("Write File Finished!"));
}

Qt中文件操作遇到的(变量,容器,结构体)

 http://www.cnblogs.com/findumars/p/5553991.html

咳咳!总结了一下我在使用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 @ 2018-04-19 12:35  sky20080101  阅读(84)  评论(0)    收藏  举报