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中文件操作遇到的(变量,容器,结构体)
咳咳!总结了一下我在使用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

 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号