1. 说明
对于文件或者文件夹,主要的操作包括新建、删除或者修改,在Qt当中主要使用的类包括QFile、QDir、QFileInfoList、QFileInfo等。
文件夹操作
在创建或者删除文件夹时,使用到的类主要为 QDir,基本使用如下,详细解释请看注释:
创建新文件夹
QString dirPath = "../"
QString dirName = "testDir";
QString path = dirPath + dirName;
//使用QDir的构造函数
QDir dir(path );
if(!dir.exists()){ //如果当前文件夹不存在
dir.mkdir(path); //创建新的文件夹
}
删除文件夹:
在文件夹删除时,有两种方式:
第一种:使用 removeRecursively() 方法,这种方法不管文件夹内是否有内容,都可直接删除
dir.removeRecursively(path);
第二种:遍历删除
bool DelDir(const QString &path)
{
if (path.isEmpty()){
return false;
}
QDir dir(path);
if(!dir.exists()){
return true;
}
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); //设置过滤
QFileInfoList fileList = dir.entryInfoList(); // 获取所有的文件信息
foreach (QFileInfo file, fileList){ //遍历文件信息
if (file.isFile()){ // 是文件,删除
file.dir().remove(file.fileName());
}else{ // 是文件夹,递归删除
DelDir(file.absoluteFilePath());
}
}
return dir.rmdir(dir.absolutePath()); // 删除文件夹(仅删除指定路径的文件夹,对于父文件夹不进行操作)
//return dir.rmpath(dir.absolutePath()); // 删除文件夹,若父文件夹为空,则同时删除父文件夹(一般不使用这个)
}
文件操作
创建新文件
void MyFile::createNewFile()
{
QDir dir(path); // path为文件要储存的路径
if(!dir.exists()){
qDebug()<<"当前文件夹不存在";
}
QString fileName = "/testFile.txt";
QString filePath = path + fileName;
QFile file(filePath); //若文件不存在,默认会在当前文件夹下创建一个文件
if(file.open(QFile::ReadWrite)){
file.close();
}
}
删除指定文件
void MyFile::deleteCurFile()
{
QDir dir(path); // path为文件要储存的路径
if(!dir.exists()){
qDebug()<<"当前文件夹不存在";
}
QString fileName = "/testFile.txt";
QString filePath = path + fileName;
dir.remove(filePath); // 删除指定文件(所需参数为文件的路径)
}
获取文件夹中或者文件信息
void MyFile::getInfoInCurDir()
{
QDir dir(path);
if(!dir.exists()){
qDebug()<<"当前文件夹不存在";
}
//获取指定文件夹中的信息,每一条信息都是一个QFileInfo,保存在一个List中返回
QFileInfoList fileList = dir.entryInfoList();
foreach (QFileInfo file, fileList) {
qDebug()<<file.filePath();//获取文件相对路径
qDebug()<<file.absoluteFilePath();//获取文件绝对路径
qDebug()<<file.suffix();//获取文件后缀类型
qDebug()<<file.dir();//获取文件的dir信息
qDebug()<<file.fileName();//获取文件名称
if(file.isFile()){
qDebug()<<"此类型是文件...";
}
if(file.isDir()){
qDebug()<<"此类型是文件夹...";
}
}
}
在指定文件中添加内容
void MyFile::changeInfoInCurFile()
{
QDir dir(path);
if(!dir.exists()){
qDebug()<<"当前文件夹不存在";
}
QString fileName = "/testFile.txt";
QString filePath = path + fileName;
QFile file(filePath); //若文件不存在,默认会在当前文件夹下创建一个文件
if(file.open(QIODevice::Append)){ //以追加的模式打开文件
QTextStream textStream(&file);
textStream.setCodec("UTF-8");
textStream<<QString("这是追加的数据\n"); //以文本流的方式写入数据
file.close();
}
}
读取文件内容
void MyFile::changeInfoInCurFile()
{
QDir dir(path);
if(!dir.exists()){
qDebug()<<"当前文件夹不存在";
}
QString fileName = "/testFile.txt";
QString filePath = path + fileName;
QFile file(filePath); //若文件不存在,默认会在当前文件夹下创建一个文件
if(file.open(QIODevice::ReadWrite)){ //以读写模式打开文件
QTextStream textStream(&file);
textStream.setCodec("UTF-8");
textStream<<QString("这是追加的数据\n"); //以文本流的方式写入数据
file.close();
}
}
如果是二进制文件,可把上面的QTextStream换成QDataStream,并将textStream.setCodec(“UTF-8”)去掉即可。
二进制文件在读取时,也需要进行类型转换,如果读取结果保存在str中,则需进行str.toUtf8()转换。