QT-文件

本文详细介绍了QT框架中的文件操作,包括使用QFile进行文本读写,以及与QTextStream配合实现流式读写。此外,还讲解了二进制文件的处理,如QDataStream用于STM和DAT文件的读写,以及如何处理中文乱码问题。同时,文章涵盖了QCoreApplication、QFileInfo、QDir等类在文件目录管理中的应用。
摘要由CSDN通过智能技术生成

目录

1、文件操作

1.1、文本读写

1.1.1、QFile

1.1.2、QTextStream

1.1.3、读取文本流程

1.1.3.1、不使用QTextStream

2.1.3.2、使用QTextStream

1.1.4、写入文本流程

1.1.4.1、不使用QTextStream

1.1.4.2、使用QTextStream

1.2、二进制读写

1.2.1、QDataStream

1.2.1、stm文件读写

1.2.1.1、写入stm

1.2.1.2、读取stm

1.2.2、dat文件读写

1.2.2.1、写入dat

1.2.2.2、读取dat

2、文件目录

2.1、QCoreApplication

2.2、QFileInfo类

2.3、QDir类

2.4、QTemporaryDir和QTemporaryFile

2.4.1、QTemporaryDir

2.4.2、QTemporaryFile

2.5、QFileSystemWatcher

3、解决中文乱码问题


1、文件操作

QT提供了2种读写文件的基本方法,一种是QFile类的IDDevice读写功能直接进行读写,另一种是利用QFile和QTextStream结合起来,用流的方法进行文件读写。

1.1、文本读写

1.1.1、QFile

QFile 类提供了读取和写入文件的接口。 QFile 可以自己使用,也可以更方便地与 QTextStream 或 QDataStream一起使用(通常使用 QDataStream 或 QTextStream 读写数据)​​​​​​​

静态函数
bool copy(const QString &fileName, const QString &newName)复制文件
bool rename(const QString &oldName, const QString &newName)重命名文件
bool remove(const QString &fileName)删除文件
bool exists(const QString &fileName)检查文件是否存在
bool setPermissions(const QString &filename, Permissions permissionSpec)设置文化的权限
Permissions permissions(const QString &filename)返回文件的权限
成员函数
void setFileName(const QString &name)设置文件名,文件打开后不能再调用此函数
bool copy(const QString &newName)将当前文件复制为newName表示的文件
bool rename(QString& newName)将当前的文件重命名为newName
bool remove()删除当前文件
bool exists()检查当前文件是否存在
bool setPermissions(Permissions permissionSpec)设置文化的权限
Permissions permissions()返回文件的权限
qint64 size()返回文件的大小
bool open(OpenMode flags)

打开文件。

QIODevice::ReadOnly:以只读方式打开文件,用于载入文件。

QIODevice::WriteOnly:以只写方式打开文件,用于保存文件。

QIODevice::ReadWrite:以读写方式打开。

QIODevice::Append:以添加模式打开,新写入文件的数据添加到文件尾部。

QIODevice::Truncate:以截取方式打开文件,文件原有的内容全部被删除。

QIODevice::Text:以文本方式打开文件,读取时“\n”被自动翻译为换行符,写入时字符串结束符会自动翻译为系统平台的编码,如 Windows 平台下是“\r\n”。

QByteArray readAll()读取数据
void close()关闭文件
bool flush()刷新文件
qint64 pos()获取当前文件位置
bool seek(qint64 offset)移动到新的文件位置
bool atEnd()是否已经到达文件的末尾
qint64 read(char *data, qint64 maxlen)读数据
qint64 write(const char *data, qint64 len);写数据

1.1.2、QTextStream

QTextStream 类为读写文本提供了一个方便的接口,常与 QFile 结合使用。QTextStream可以使用 “<<”和“>>” 进行操作流。QTextStream 可以在 QIODevice(QFile、QTemporaryFile、QBuffer、QTcpSocket、QUdpSocket)、 QByteArray 或 QString 上操作。

QString readAll()读取数据
void setAutoDetectUnicode(bool enabled)设置自动检测Unicode
bool atEnd()是否已经到达文件的末尾
QString readLine(qint64 maxlen = 0)

通过自动换行符来读取一行字符串

1.1.3、读取文本流程

1.1.3.1、不使用QTextStream

*1)调用QFileDialog::getOpenFileName()获取文本路径

2)调用isEmpty()判断文本路径是否存在

3)设置QFile文本file.setFileName(fileName);

4)调用exists()判断文件是否存在

5)调用open()打开

6)调用readAll()读取内容

7)调用close()关闭

2.1.3.2、使用QTextStream

*1)调用QFileDialog::getOpenFileName()获取文本路径

2)调用isEmpty()判断文本路径是否存在

3)设置QFile文本file.setFileName(fileName);

4)调用exists()判断文件是否存在

5)调用open()打开

6)定义QTextStream,将QFile作为参数传入

7)调用setAutoDetectUnicode(true),如果文本文件种有汉字,需要设定为自动识别Unicode码

8)使用QTextStream的readAll()读取内容

9)调用close()关闭

1.1.4、写入文本流程

1.1.4.1、不使用QTextStream

1*)调用toUtf8()将QString转换为QByteArray;

2)调用open()打开

3)调用write()函数写入内容

4)调用close()关闭

1.1.4.2、使用QTextStream

1)调用open()打开

2)定义QTextStream,将QFile作为参数传入

3)使用<<直接将QString写入QTextStream

4)调用close()关闭

1.2、二进制读写

QT使用QFile和QDataStream进行二进制数据文件的读写。QFile负责文件的IO设备接口,QDataStream以数据流的方式读取文件内容或写入文件内容。

QT有2种二进制格式:

1)Qt预定义编码,文件后缀名为“.stm”

2)标准编码数据文件,文件后缀名为".dat"

1.2.1、QDataStream

void QDataStream::setVersion(int v)流版本号,写入和读取版本要兼容。v是QDataStream::Version枚举类型的值
void setByteOrder(ByteOrder)设置字节序,参数是QDataStream::ByteOrder枚举类型常量
int writeRawData(const char *, int len)将数据写入数据流
QDataStream &writeBytes(const char *, uint len)在写入数据时,会先将len作为一个quint32类型写入数据流,此函数适用于字符串数据的写入。
int readRawData(char *, int len)从数据流读取数据
QDataStream &readBytes(char *&, uint &len)自动读取长度和内容,适用于字符串数据的读取

1.2.1、stm文件读写

1.2.1.1、写入stm

1)创建QFile对象,调用open()打开文件

2)创建QDataStream对象与QFile对象关联

3)setVersion()设置流版本号

4)按照需要保存数据的顺序使用<<写入文件流QDataStream(qintX,qreal、字符串,除了可以写入基本的数据类型外,还可以写入很多其他类型的数据,如QBrush、QColor、QImage、QIcon等,这些称为可序列化的数据类型)

5)调用close()关闭

1.2.1.2、读取stm

1)调用QFileDialog::getOpenFileName()获取文本路径

2)调用exists()判断文件是否存在

3)调用open()打开

4)创造QDataStream对象与QFile对象关联

5)setVersion()设置流版本号

6)使用>>的读取内容

7)调用close()关闭

1.2.2、dat文件读写

1.2.2.1、写入dat

*1)调用toUtf8()将QString转换为QByteArray;

2)创建QFile对象,调用open()打开文件

3)创造QDataStream对象与QFile对象关联

4)setByteOrder(QDataStream::LittleEndian)设置小字节序

5)调用writeRawData()将数据写入数据流或writeBytes()写入字符串数据

6)调用close()关闭

1.2.2.2、读取dat

1)调用QFileDialog::getOpenFileName()获取文本路径

2)调用exists()判断文件是否存在

3)调用open()打开

4)创造QDataStream对象与QFile对象关联

5)使用readRawData()的读取数据流或readBytes()读取字符串

6)调用close()关闭

2、文件目录

QCoreApplication用于提取应用程序路径、程序名等文件信息
QFile除了打开文件操作外,还有复制文件、删除文件功能
QFileInfoQFileInfo
QDir提取目录或文件信息,获取一个目录下的文件或目录列表,创建或删除目录和文件,文件重命名等操作
QTemporaryDir用于创建临时目录和临时文件
QTemporaryFile
QFileSytemWatcher文件和目录监听类,监听目录下文件的添加、删除等变化,监听文件修改变化

2.1、QCoreApplication

QCoreApplication是为无GUI应用提供时间循环的类,是所有应用程序类的基类,其子类QCuiApplication为有GUI界面的应用程序提供流控制和主要的设定,QCuiApplication的子类QApplication为基于QWidget的应用程序提供支持,包括界面的初始化等​​​​​​​

QString applicationDirPath()返回应用程序启动路径
QString applicationFilePath()返回应用程序的带有目录的完整文件名
QString applicationName()返回应用程序名称,无路径无后缀
QStringList libraryPaths()返回动态加载库文件时,应用程序搜索的目录列表
void setOrganizationName(QString &orgName)为应用程序设置一个机构名
QString organizationName()返回应用程序的机构名
void exit()退出应用程序

2.2、QFileInfo类

QFileInfo类提供文件的各种信息。

void setFile(const QString &file)设置一个文件名,作为QFileInfo操作的文件
QString absoluteFilePath()返回带有文件名的绝对文件路径
QString absolutePath()返回绝对文件路径,不带文件名
QString fileName()返回去除路径的文件名
QString filePath()返回包含文件名的路径
QString path()返回不含文件名的路径
qint64 size()返回文件大小,以字节为单位
QString  baseName()返回文件基名,第一个”.“之前的文件名
QString completeBaseName()返回文件基名,最后一个”.“之前的文件名
QString suffix()最后一个”.“之后的后缀
QString completeSuffix()第一个”.“之后的后缀
bool isDir()判断当前对象是否是一个目录或目录的快捷方式
bool isFile()判断当前对象是否是一个文件或文件的快捷方式
bool isExecutable()判断当前文件是否为可执行文件
QDateTime created()返回文件创建时间
QDateTime lastModified()返回文件最后一次被修改的时间
QDateTime lastRead()返回文件最后一次被读取的时间
bool exits()判断文件是否存在
静态函数
bool exits(QString &FILE)判断文件是否存在

2.3、QDir类

静态函数
QString tempPath()返回临时文件目录名称
QString rootPath()返回根目录名称
QString homePath()返回主目录名称
QString  currentPath()获取当前路径
bool setCurrent(QString  &path)设置path表示的目录为当前目录
QFileInfoList drives返回系统的根目录列表,在Windows上返回的是盘符列表
成员函数
QString absoluteFilePath(QString &fileName)返回当前目录下的一个文件的含绝对路径文件名
QString absolutePath()返回当前目录的绝对路径
QString canonicalPath()返回当前目录的标准路径
QString dirName()返回最后一级目录的名称
QStringList entryList(Filters filters = NoFilter,SortFlags sort = NoSort)返回目录下的所有文件名、子目录名等
bool mkdir(QString &dirName)在当前目录下创建一个目录
bool rmdir(QString &dirName)删除指定的目录dirName
bool remove(QString &fileName)删除当前目录下的文件fileName
bool rename(QString &oldName,QString &newName)将文件或目录oldName更名为newName
void setPath(QString &path)设置QDir对象的当前目录
void removeRecursively()删除当前目录及其下面的所有文件

2.4、QTemporaryDir和QTemporaryFile

2.4.1、QTemporaryDir

QTemporaryDir是创建、删除临时目录的类。

void setAutoRemove(bool)设置为是否自动删除
QString path()返回创建的临时目录名称
bool remove()删除此临时目录以及下面的所有文件

QTemporaryDir会在系统临时目录,即QDir::tempPath目录下创建一个临时目录,临时目录名称以QCoreApplication::applicationName()为前缀,后加6个字符。

2.4.2、QTemporaryFile

QTemporaryFile是创建、删除临时文件的类。临时文件保存在系统临时目录下。临时文件名称以QCoreApplication::applicationName()作为文件名,以”XXXXXX“6个随机数字作为文件后缀

void setAutoRemove(bool)设置为是否自动删除
bool open()用于打开临时文件,只有打开临时文件,才实际创建了此文件

2.5、QFileSystemWatcher

QFileSystemWatcher是对目录和文件进行监听的类。

bool addPath(QString  &path)添加一个监听的目录或文件
QStringList addPaths(QStringList &paths)添加需要监听的目录或文件列表
QStringList diretores()返回监听的目录列表
QStringList filse()返回监听的文件列表
bool removePath(QString  &path)移除监听的目录或文件
QStringList removePaths(QStringList &paths)添加需要监听的目录或文件列表
信号
void QFileSystemWatcher::directoryChanged(const QString &path)目录变化发射的信号
void QFileSystemWatcher::fileChanged(const QString &path)文件变化发射的信号

3、解决中文乱码问题

为解决Unicode的识别问题,可以在应用程序中做全局的设置,使得应用程序支持Unicode。方法是使用QTextCodec类进行编码设置。

QTextCodec *codec = QTextCodec::codecForName("UTF-8");

QTextCodec::setCodeForLocale(codec );

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: webrtc-qt-example是一个基于Qt框架开发的WebRTC示例项目。 WebRTC是一种开源的实时通信技术,能够支持音频、视频和数据的实时传输。它通过浏览器之间的端对端连接,实现了高质量的实时通信。 webrtc-qt-example的目的是展示如何使用Qt进行WebRTC开发。Qt是一套跨平台的C++应用程序开发框架,它提供了丰富的工具和库,使开发者能够快速构建可靠的应用程序。 这个示例项目提供了一些基本的功能和界面,使开发者能够了解和学习如何将WebRTC集成到Qt应用程序中。它包含了常见的WebRTC功能,如媒体流捕获、媒体流传输、信令交换等。 通过webrtc-qt-example,开发者可以学习到如何使用Qt的多媒体模块来捕获音频、视频和媒体设备。同时,也可以学习到如何使用Qt的网络模块来进行实时信令交换和流传输。 这个示例项目还提供了一些简单的界面,方便开发者进行测试和调试。开发者可以通过该界面实现与其他WebRTC应用的通信,例如建立视频通话、音频通话等。 总之,webrtc-qt-example是一个非常实用的示例项目,可以帮助开发者快速上手并掌握WebRTC在Qt中的开发。 ### 回答2: webrtc-qt-example是一个基于Qt框架的WebRTC示例应用程序。WebRTC是一种开源项目,它提供了在浏览器之间进行实时通信的能力,包括视频和音频的传输。而webrtc-qt-example则是将这种技术集成到Qt应用程序中的一个示例。 在webrtc-qt-example中,它使用了Qt的多媒体框架和WebRTC提供的API来实现音视频的传输和显示。通过使用WebRTC的API,webrtc-qt-example可以建立点对点的连接,进行音频和视频的实时传输。 webrtc-qt-example中的代码结构清晰,易于理解和扩展。它提供了一些基本的功能,如建立连接、发送和接收音视频流、呼叫取消等。开发者可以根据自己的需求来对这些功能进行定制和扩展。 此外,webrtc-qt-example还支持一些高级特性,如媒体设备的选择、音视频的编码和解码等。开发者可以通过修改代码来选择不同的媒体设备,并且可以使用不同的编码和解码算法来满足自己的需求。 总之,webrtc-qt-example是一个很棒的WebRTC示例应用程序,它可以帮助开发者快速了解和使用WebRTC技术。无论是为了实现实时视频通话、视频会议还是其他需要音视频传输的应用场景,webrtc-qt-example都提供了一个良好的起点,帮助开发者快速上手并实现自己的需求。 ### 回答3: webrtc-qt-example是一个基于Qt框架和WebRTC技术的示例应用。WebRTC是一种用于在Web浏览器上实现实时通信的开源项目,它提供了一套丰富的API和协议,可以实现音视频通话、数据传输以及屏幕共享等功能。 webrtc-qt-example利用Qt框架提供的跨平台能力,结合WebRTC技术,展示了在Qt应用中如何实现实时通信功能。这个示例应用具有以下特点和功能: 1. 界面友好:webrtc-qt-example使用Qt的GUI绘制工具,具有美观、直观的用户界面,便于用户操作和使用。 2. 实时通信:webrtc-qt-example内置了WebRTC的音视频通信功能,可以实现实时的语音和视频通话,支持两个或多个用户之间的通信。 3. 数据传输:除了音视频通话,webrtc-qt-example还支持在通话中传输数据。可以通过编写代码,实现实时文本传输或共享文件等功能。 4. 屏幕共享:webrtc-qt-example还支持屏幕共享功能,可以将自己的屏幕内容分享给其他用户,实现远程协助或在线教育等应用场景。 通过webrtc-qt-example的学习和实践,开发者可以了解并深入理解WebRTC技术的使用方法,以及在Qt框架中的应用。同时,借助webrtc-qt-example提供的示例代码和API文档,开发者可以进一步开发出更加复杂和功能丰富的实时通信应用,满足不同领域的需求。 总之,webrtc-qt-example是一个基于Qt框架和WebRTC技术的示例应用,具备实时音视频通话、数据传输和屏幕共享等功能,适用于开发者学习、实践和开发基于WebRTC的实时通信应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值