QT踩坑第六天(文件管理)

先配置好Qt调试器
QT+MSVC环境需要配置的
在这里插入图片描述

一、文件管理

1.1 目录操作

主要用到两个类:QDir、QFileInfo
QDir类
QDir类具有存取目录结构和内容的能力,使用它可以操作目录,存取目录或文件信息、操作底层文件系统,而且还可以存取Qt的资源文件。
Qt使用"/“作为通用的目录分隔符和URL路径分隔符。如果在程序中使用”/“作为目录分隔符,Qt会自动转换为符合底层操作系统的分隔符(像Linux使用”/",Windows使用""。判断目录是否存在可以使用exists(),目录属性可以使用isReadable()、isAbsolute()、isRelative()和isRoot来获取。目录下面的很多条目,像文件、目录和符号连接,总的条目数可以使用count()来统计。entryList(0返回目录下所有的条目组成的字符串链表。文件可以使用remove()函数来删除。删除目录用rmdir()。)
一般使用Filters对目录下的文件进行过滤。
QFileInfo类
QFileInfo类提供了与系统无关文件的文件信息,包括文件的名称、文件系统中的位置(路径)、文件的访问权限以及是否是一个目录或者符号链接等。QFileInfo也可以获取文件的大小和最近一次修改文件的时间,还以获取Qt资源的相关信息。
QFileInfo指向的文件可以在QFileInfo对象构建时设置,或者以后使用setFile()来设置。也可以使用exists()函数来查看文件是否存在,只用size()获取文件的大小。
1.1.1判断文件是否存在

#include <QCoreApplication>#include<QDir>
#include<qDebug>
int main(int argc, char *argv[]) 
{    QCoreApplication a(argc, argv);    //定义一个目录    QDir mDir("D:/BaiduNetdiskDownload");     //文件不存在则创建一个新文件    if(!mDir.exists())    
{        mDir.mkdir("D:/BaiduNetdiskDownload");      
 qDebug()<<"Created New";    }     //文件存在输出Already Exists   
 else   
  {        qDebug()<<"Already Exists";    }  
    qDebug()<<mDir.exists();    return a.exec(); 
  }

1.1.2 获取常用目录

#include <QCoreApplication>
#include<QDir>
#include<qDebug>
int main(int argc, char *argv[])
 {    QCoreApplication a(argc, argv);  
   QDir mDir;    qDebug()<<mDir.current();   
    qDebug()<<".....................";   
    qDebug()<<mDir.currentPath();  
   qDebug()<<".........................."; 
   qDebug()<<mDir.homePath(); 
    qDebug()<<".......................";    
   qDebug()<<mDir.tempPath();    
     qDebug()<<"...................";     
    qDebug()<<mDir.rootPath();   
   return a.exec();
               }

1.1.3目录切换

#include <QCoreApplication>
#include<QDir>
#include<qDebug>
int main(int argc, char *argv[])
 {    QCoreApplication a(argc, argv);   
  QDir mDir("D:/tanzhouEDU/Qtlearning/lesson6");   
   qDebug()<<mDir.dirName();   
    qDebug()<<mDir.absolutePath();   
     mDir.cd("C:/");    
     qDebug()<<mDir.absolutePath();    
     return a.exec();
      }

1.1.4文件夹遍历

#include <QCoreApplication>
#include<QDir>
#include<qDebug>
int main(int argc, char *argv[])
 {    QCoreApplication a(argc, argv);    
 QDir mDir("D:/tanzhouEDU/Qtlearning/lesson6");    
 foreach(QFileInfo mItem,mDir.entryInfoList())   
  {        if(mItem.isDir())       
   {            qDebug()<<"Dir"<<mItem.filePath();        }        
   else if(mItem.isFile())       
    {            qDebug()<<"File"<<mItem.filePath();       
     }  
      }   
     return a.exec();
      }

在这里插入图片描述

1.1.5文件遍历
使用mItem.isFile()

#include <QCoreApplication>
#include<QDir>#include<qDebug>
int main(int argc, char *argv[])
 {    QCoreApplication a(argc, argv);  
   QDir mDir("D:/tanzhouEDU/Qtlearning/lesson6/test1");  
     foreach(QFileInfo mItem,mDir.entryInfoList())    
     {         if(mItem.isFile())       
      {           
       qDebug()<<"File"<<mItem.filePath();       
       }  
         }   
          return a.exec();
          }

在这里插入图片描述
1.1.6过滤器的使用

QDir mDir(QDir::current());
QStringList filters;filters<<"*.cpp"<<"*.h"<<"*.txt"<<".pro";
mDir.setNameFilters(filters);qDebug()<<mDir.entryList(filters, QDir::Files);

在这里插入图片描述
1.2文件操作
文件操作主要提供了3个类:QFile、QFileInfo、QDir
QFile
QFile类提供了一个用于读/写文件的接口,它可以用来读/写文本、二进制文件和Qt资源的I/O设备。
一般在构建QFile对象时便指定文件名,当然也可以使用setFileName()来设置,可以使用exists()来检查文件是否使用remove()来删除一个文件。
可以使用open()来打开一个文件。使用close()来关闭一个文件。flush()刷新。文件的读写使用read()、readLine()、readAll()和write()可以使用size()函数来获取文件大小,使用seek()定位文件的位置,使用pos()来获取当前的位置,使用atEnd()来判断是否到达了文件的末尾 。
1.2.1打开并写入文件
文件操作流程 打开­>写入/读取­>关闭
访问一个设备以前,需要使用 open ()函数打开该设备,而且必须指定正确的打开模式,不同的打开模式之 间可以使用“|”符号同时使用。
打开设备后可以使用 write()或者 putChar()来进行写人,可以使用seek函数进行文件指针移动(如果有),使用 read ()、 readLine ()或者 readAll ()进行读取,最后使用 close()关闭设备。

枚举值 描述

QIODevice::NotOpen	未打开
QIODevice::ReadOnly	以只读方式打开
QIODevice::WriteOnly	以只写方式打开
QIODevice::ReadWrite	以读写方式打开
QIODevice::Append	以追加的方式打开,新增加的内容将被追加到文件末尾
QIODevice::Truncate	以重写的方式打开,在写入新的数据时会将游标设置在文件开头;覆盖重写
 
QIODevice::Text	在读取时,将行结束符转换成 \n;在写入时,将行结束符转换成本地格式,例如 Win32 平台 上是 \r\n
QIODevice::Unbuffered	忽略缓存

#include <QCoreApplication>
#include<QDir>
#include<qDebug>
int main(int argc, char *argv[])
 {    QCoreApplication a(argc, argv);   
  QFile file("tzFile.txt");    //判断一个文件是否存在不存在则写一个    if(!file.open(QIODevice::WriteOnly|QIODevice::Text))   
   {        qDebug()<<file.errorString();    }   
    else    {        qDebug()<<"open sucess!";    }   
     file.write("hello TZ EDU! \n I Lile Qt program");    
     file.close();   
      return a.exec(); 
      }

1.2.2打开并读出文件

#include <QCoreApplication>
#include<QDir>
#include<qDebug>
int main(int argc, char *argv[])
 {    
 QCoreApplication a(argc, argv);    
 QFile file("tzFile.txt");    //判断一个文件是否存在只有当文件存在时才可以打开    if(!file.open(QIODevice::ReadOnly|QIODevice::Text))   
  {        
  qDebug()<<file.errorString();    
  }   
   else    
   {        
   qDebug()<<"open sucess!";   
    }   
   while(!file.atEnd())  
    {      
    QByteArray line=file.readLine();      
    qDebug()<<"read some data:"<<line;   
    }    
    file.close();   
     return a.exec();
      }

1.2.3插讲QIODevice类
QIODevice 类是 Qt 所有 I/O 设备的基础类 ,为QFIle等类提供一个抽象接口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
演示如果QIODevice的错误警告信息

QFile file("tzFileddd.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{qDebug() << file.errorString();}else{qDebug() << "open sucess !";}

这里千万不能用write方式打开!
在这里插入图片描述
同样的操作再网络编程中也实用!比如“端口占用错误” | “IP地址错误”;
1.2.4获取文件的路径和大小
比如做网络传输时,需要首先判断文件的大小

 QFile file("image.jpg"); 
  QFileInfo info(file);   /* 获取文件路径及大小 */  
   qDebug() << QStringLiteral("路径")<<  info.absoluteFilePath()       << QStringLiteral("大小") << info.size();     
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))qDebug() << file.errorString(); 
    //文件指针offset 6 
    file.seek(6);
    QByteArray array;array = file.read(4);
    qDebug() << "read some data:"<< array; qDebug() << "pos:"<< file.pos();   
     file.close();

在这里插入图片描述
1.2.5文件流读写
out对电脑来说是输出,对文本来说是输入
缓存到文件 文件到缓存
写入文本流

QFile file("output.txt");
if( file.open(QFile::WriteOnly | QFile::Truncate))
{QTextStream out (&file);out << "Pi"<< qSetFieldWidth(10) << left <<3.1415926;  
//左对齐,10字宽 
out << "\r\n insert new line";}file.close();

读入文本流

QFile file("output.txt");
QTextStream out (&file);
if( file.open(QIODevice::WriteOnly |QIODevice::Truncate))
{QTextStream out (&file);
out << "Pi"<< qSetFieldWidth(10) << left <<3.1415926; out << "\r\n insert new line";
} 
//读取文件QFile
 fileOpen("output.txt");
 if(! fileOpen.open(QIODevice::ReadOnly | QIODevice::Text)) qDebug() << fileOpen.errorString();QTextStream in(&fileOpen); 
 qDebug()<<""<<"output.txt data :"; 
 while(!in.atEnd()){QString oneLine = in.readLine(); 
 qDebug() << oneLine;}//文件指针跳转到头 
 in.seek(0);QString allLine = in.readAll(); 
 qDebug() << " " << allLine; fileOpen.close();

猜你喜欢

转载自blog.csdn.net/qq_41848597/article/details/89922989