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

上一篇:jvm系列(十一):JVM演讲PPT分享


下一篇:ThreadLocal详解,处理成员变量线程不安全的情况