qt深入解析
1.Qt IO
设备类型:
- 顺序存储设备:如网卡。。
- 随机存储设备:如.txt..
Qt中IO设备继承图
Qt中的文件系统
通用开发库,跨平台
QIODevice IO父类,提供字节块读写通用操作和基本接口
QFileDevice提供文件操作通用实现
QFile访问本地文件或嵌入资源
QTemporayFile创建和访问本地系统的临时文件
QBuffer读写QbyteArray,内存文件
QProcess运行外部程序,处理进程间通讯
QAbstractSocket所有套接字类的父类
QTcpSocket TCP协议网络数据传输
QUdpSocket 传输UDP报文
QSslSocket 使用SSL/TSL传输数据
同步IO/异步IO
异步IO也就是重叠(overlap)IO
QIODevice
QIODevice是抽象的,不能被实例化,提供抽象接口
QIODevice是区分两种设备的:随机访问设备,顺序设备
随机访问设备:支持通过()查找任意位置。文件当前位置通过pos()获取。例:QFile,QBuffer
顺序设备:不支持寻找任意位置。数据必须在一次传递中获取。pos()和size()不适用于顺序设备。例:QTcpSocket,QProcess
可以使用isSequential()来确定设备类型
数据可用时,QIODevice发出readyRead()。可以使用bytesAvailable()确定可供阅读的字节数。
QIODevice向设备写入数据fwrite时会发出bytesWritten()信号。使用bytesToWrite()来确定等待写入的当前数据大小。
QIODevice某些子类是异步的,如QTcpSocket,QProcess,诸如write()和read()之类的输入输出函数总是立即返回的。
QIODevice提供了一些功能,允许您立即执行这些操作,同事阻塞调用线程,而不需要进入时间循环。
waitForReadyRead() 在调用线程中暂停操作,知道新的数据可用来读取
waitForBytesWritten() 在调用线程中挂起操作,直到将数据的一个有效负载写入到设备
waiFor....() QIODevice的子类实现特定于设备的操作的阻塞函数
QDir
获取当前目录
[static] QString QDir::currentPath() //取得当前项目所在的目录
[static] QString QCoreApplication::applicationDirPath() //取得exe文件(在windows系统中)所在的目录
切换到当前文件父目录
bool QDir::cdUp()
absolutePath()获取绝对路径
得到所有文件信息
QStringList:: QDir::entryList()//返回该目录下所有文件及文件夹名字的列表
QFileInfoList QDir::entryInfoList()//返回该目录下所有文件和文件夹信息的列表
QDir mDir("D:/qttest")
mDir.exits();//文件是否存在
mDir.absolutePath("a.txt")//返回指定目录下指定文件的绝对路径
mDir.dirName();//剥离掉路径,只返回目录的名字
QFile
bool QFile::open(OpenMode mode)
参数:决定文件以何种方式打开
QIODevice::ReadOnly,WriteOnly(只写,打开时原内容清空,文件不存在则创建),ReadWrite,Append,Truncate(重写方式打开,文件原有内容全部清空),Text(文本方式打开'\n'翻译为换行符,写入时,将行结束符转换成本地格式)
close();//关闭文件
read();//读文件,参数为读取的长度大小(必填)fread
readLine();//读取一行
readAll();//读取所有
write();//向文件中写入数据
atEnd();//判断是否到达文件尾
seek();//将文件指针定位到指定位置处
pos();//获取文件指针当前位置
bool QFile::copy(const QString &newName)//文件复制
bool exits() const;//文件是否存在
bool link(const QString &linkName)//创建连接(快捷方式)
bool remove()//删除一个文件
bool rename(const QString &newName)//重命名
void setFileName(const QString &name) //设置文件名
//静态成员
bool copy(const QString &fileName, const QString &newName)
bool setPermissions(const QString &fileName, Permission permissions)
Permissions permissions(const QString &fileName)
使用流程:
1.QFile创建一个文件对象
2.open()打开这个文件
3.可以使用QFileInfo获取有关该文件的信息
或者进行读写操作
QFileInfo有很多函数:
isDir();
isExecutable()//是否是可执行文件
baseName()//直接获得文件名
completeBaseName()//获取完整文件名
suffix()//直接获取文件后缀名
completeSuffix()//获取完整的文件后缀