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 #include
#include
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()<
1.1.2 获取常用目录
#include
#include
#include
int main(int argc, char *argv[])
{ QCoreApplication a(argc, argv);
QDir mDir; qDebug()<
1.1.3目录切换
#include
#include
#include
int main(int argc, char *argv[])
{ QCoreApplication a(argc, argv);
QDir mDir("D:/tanzhouEDU/Qtlearning/lesson6");
qDebug()<
1.1.4文件夹遍历
#include
#include
#include
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"<
1.1.5文件遍历
使用mItem.isFile()
#include
#include#include
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"<
QDir mDir(QDir::current());
QStringList filters;filters<<"*.cpp"<<"*.h"<<"*.txt"<<".pro";
mDir.setNameFilters(filters);qDebug()<
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
#include
#include
int main(int argc, char *argv[])
{ QCoreApplication a(argc, argv);
QFile file("tzFile.txt"); //判断一个文件是否存在不存在则写一个 if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
{ qDebug()<
1.2.2打开并读出文件
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile file("tzFile.txt"); //判断一个文件是否存在只有当文件存在时才可以打开 if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
{
qDebug()<
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();