QT-文件

目录

1、文件对话框

1.1、打开文件对话框

1.2、保存文件对话框

1.3、过滤器filter

2、文件操作

2.1、文本读写

2.1.1、QFile

2.1.2、QTextStream

2.1.3、读取文本流程

2.1.3.1、不使用QTextStream

2.1.3.2、使用QTextStream

2.1.4、写入文本流程

2.1.4.1、不使用QTextStream

2.1.4.2、使用QTextStream

2.2、二进制读写

2.2.1、stm文件读写

2.2.1.1、写入stm

2.2.1.2、读取stm

2.2.2、dat文件读写

2.2.2.1、写入dat

2.2.2.2、读取dat

3、文件目录

3.1、QCoreApplication

3.1.1、常用函数

3.2、QFileInfo类

3.3、QDir类

3.4、QTemporaryDir和QTemporaryFile

3.4.1、QTemporaryDir

3.4.2、QTemporaryFile

3.5、QFileSystemWatcher

4、解决中文乱码问题


1、文件对话框

1.1、打开文件对话框

QString QFileDialog::getOpenFileName(QWidget *parent = 0,

                                   const QString &caption = QString(),

                                   const QString &dir = QString(),

                                   const QString &filter = QString(),

                                   QString *selectedFilter = 0,

                                   Options options = 0);

1.2、保存文件对话框

QString QFileDialog::getSaveFileName(QWidget *parent = 0,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   const QString &filter = QString(),
                                   QString *selectedFilter = 0,
                                   Options options = 0);

1.3、过滤器filter

filter参数是对话框的后缀名过滤器(空格分隔过滤项、;;分隔多个过滤器)。比如使用"JPEG 图像(.jpg .jpeg)“就让它只显示后缀名是jpg或者jpeg的文件。如果需要使用多个过滤器,使用”;;“分割,比如"JPEG Files(.jpg);;PNG Files(.png)”;

2、文件操作

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

2.1、文本读写

2.1.1、QFile

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

文件名通常在构造函数中传递,但它可以在任何时候使用 setFileName()设置。
 QFile的文件分隔符都是'/'。

静态函数
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()

打开文件

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

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

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

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

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

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

close() 关闭文件
flush() 刷新文件
readAll() 读取数据
pos() 获取当前文件位置
seek() 移动到新的文件位置
atEnd() 是否已经到达文件的末尾
read() 读数据
write() 写数据

2.1.2、QTextStream

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

readAll() 读取数据
setAutoDetectUnicode() 设置自动检测Unicode
atEnd() 是否已经到达文件的末尾
readLine()

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

2.1.3、读取文本流程

2.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()关闭

2.1.4、写入文本流程

2.1.4.1、不使用QTextStream

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

2)调用open()打开

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

4)调用close()关闭

2.1.4.2、使用QTextStream

1)调用open()打开

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

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

4)调用close()关闭

2.2、二进制读写

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

QT有2种二进制格式:

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

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

2.2.1、stm文件读写

2.2.1.1、写入stm

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

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

3)setVersion()设置流版本号

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

5)调用close()关闭

2.2.1.2、读取stm

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

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

3)调用open()打开

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

5)setVersion()设置流版本号

6)使用>>的读取内容

7)调用close()关闭

2.2.2、dat文件读写

2.2.2.1、写入dat

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

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

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

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

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

6)调用close()关闭

2.2.2.2、读取dat

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

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

3)调用open()打开

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

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

6)调用close()关闭

3、文件目录

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

3.1、QCoreApplication

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

3.1.1、常用函数

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

3.2、QFileInfo类

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

void setFile() 设置一个文件名,作为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) 判断文件是否存在

3.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() 删除当前目录及其下面的所有文件

3.4、QTemporaryDir和QTemporaryFile

3.4.1、QTemporaryDir

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

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

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

3.4.2、QTemporaryFile

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

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

3.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) 文件变化发射的信号

4、解决中文乱码问题

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

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

QTextCodec::setCodeForLocale(codec );

你可能感兴趣的:(qt)