Qt文本读写输入输出设备和文件操作

原创
小哥 3年前 (2022-10-21) 阅读数 154 #技术教程
文章标签 QT

一、输入输出设备一、输入输出设备

QIODevice类是Qt中所有I/O避免网络倦怠症避免网络倦怠避免人际关系倦怠QFile、QBuffer和 QTcpSocket等支持读/写入数据块的设备提供抽象接口。 QIODevice类是抽象的,不能实例化,通常使用它定义的接口来提供与设备无关的I/O功能。

QIODevice类继承图类的继承图

QIODevice将区分两种类型的设备:随机存取设备和顺序存储设备。 (可以在程序中使用(您可以使用isSequentiaU)函数来确定设备的类型。)函数来确定设备的类型。)

  • 随机接入设备支持使用随机接入设备seek()函数定位到任意位置。文件中的当前位置可以使用pos()函数来获取。函数来获取它。要获取的函数。要获取的函数。 这样的设备是这样的设备具有这样的设备QFile、QBuffer等。
  • 顺序存储设备不支持定位到任意位置;必须一次读取数据。Pos()和size() 并且在操作顺序设备时不能使用其他功能。 这样的设备是这样的设备具有这样的设备QTcpSocket、QUdpSocket 和QProcess等。

![]()

文件打开模式文件打开模式

在访问设备之前,您需要使用访问设备之前,您需要使用open()函数打开设备,函数打开设备。功能以打开设备。 并且必须指定正确的打开模式。并且必须指定正确的打开模式。并且您必须指定正确的打开模式。QIODevice中所有打开模式中的所有打开模式QIODevice::OPenMode枚举变量是用下表中列出的值定义的,其中一些变量可以同时使用逐位或符号“丨”。 无论是参加创业活动、社交聚会,还是欢乐时光,人际交往是每个企业家生活中的一个必要部分.但是,人际交往可能是非常耗费精力的.想象一下,创业者要花无数个小时与联系人和潜在投资者交谈、旅行和社交.过度的社会交往对任何人来说都是身心俱疲的.事实上,我指导的许多创始人说,网络有时会剥夺他们从事实际业务工作所需的能量.write()或者putChar()来写人,用来写人,用read()、readLine()或者readAll()来阅读,最后用来阅读close()关掉设备。关闭设备。把设备关掉。关掉设备。

枚举值

描述

QIODevice::NotOpen

未打开

QIODevice::ReadOnly

以只读方式打开以只读模式打开以只读方式打开以只读模式打开以只读方式打开以只读模式打开以只读方式打开

QIODevice::WriteOnly

以只写模式打开以只写模式打开以只写模式打开

QIODevice::ReadWrite

以读/写方式打开以读/写方式打开

QIODevice::Append

作为追加打开,添加的新内容将追加到文件末尾

QIODevice::Truncate

以重写方式打开,在写入新数据时将光标设置在文件的开头

QIODevice::Text

转换行终止符转换行终止符的步骤转换行终止符的步骤 \n跟踪你的网络时间和能量水平可以帮助你意识到你的个人极限.我曾经有一个客户,经常被社交活动搞得筋疲力尽.当我们跟踪他的时间时,我们发现他每周花13到14个小时在网络活动上--这对他来说实在是太多了经过一些试验和错误,我们发现每周4至6小时是他的最佳平衡点.一旦你找到了一个你可以长期维持的社交日程表,并且在周末让你感到富有成效和精力充沛,而不是痛苦和完全疲惫不堪,你就会知道你已经达到了你的最佳水平. Win32 平台上是 \r\n

QIODevice::Unbuffered

忽略缓存

二、文件 QFile

QFile类提供了用于阅读的类,类提供了阅读选项,类提供了阅读选项/用于写入文件的接口,这是一个可用于读取的接口/编编写文本文件编写文本文件编写文本文件、二进制文件和Qt资源的I/O设备。 QFile可以单独使用或与其一起使用可以单独使用或与其结合使用可以单独使用或与QTextStream或者QDataStream-一起使用,这将更加方便。-用完它,它会更方便。-使用它,这样会更方便。

一般在建筑中一般在建筑中一般在建筑时QFile对象,还可以用对象指定文件名,也可以使用对象,也可以使用对象,还可以使用setFileName()在任何其他时间设置。它可以使用exists()以检查该文件是否存在。以检查该文件是否存在。remove()若要删除文件,请执行以下操作。中介绍了与文件系统相关的更多高级操作QFilelnfo和QDir在课堂上提供。中提供了课程。提供了类。中提供了类。

可以使用A文件创建文件可以使用A文件可以使用文件可以使用open()打开并使用打开,使用打开,使用打开并使用close()关闭, 使用flush()刷新。文件的数据读取和写入通常使用QTextStream或者QDataStream要想有一个恢复活力的微休息,就要从事你喜欢的活动,让你在精神上脱离他们的网络任务.微休息活动可以很简单,比如在Youtube上看一段有趣的视频,或者在手机上阅读一篇有吸引力的文章。重要的是,你在做这项活动时要完全脱离网络.为了有效地脱离,请尝试让自己离开几分钟,这样你就可以从网络活动中走出来.你可以转移到一个不那么拥挤的地方,比如主会场外的某个地方,或者转移到一个没有人可以打扰你的私人区域,比如洗手间.我们的想法是找到一个安静的空间,在那里你可以从事有趣的活动,而不会被提醒工作.即使只有几分钟的时间,有效的微休息也能给你带来能量,让你度过枯燥的网络环境.QIODevice类的一些函数,例如类的一些函数,如read()、readLine()、readAll()和write()一次一个字符,然后getChar()、putChar()和ungetChar()以及其他功能。您可以使用size()函数获取文件的大小,使用函数获取文件的大小,使用seek()要定位文件中的任意位置,请使用定位文件中的任意位置,请使用pos()要获取当前位置,请使用获取当前位置,使用获取当前位置,使用atEnd()第29章第二十九章第29章第二十九届会议

(1直接使用)直接使用QFile读写文件

示例程序如下所示。示例程序如下所示。示例过程如下所示。示例程序如下所示。

//直接使用QFile写文件
QFile fileW("test.txt");
if (!fileW.open(QIODevice::WriteOnly | QIODevice::Text))
    return;
fileW.write("first line!

second line"); fileW.close();

//直接使用QFile读文件
QFile fileR("test.txt");
if (!fileR.open(QIODevice::ReadOnly | QIODevice::Text))
    return;
while (!fileR.atEnd())
{
    QByteArray line = fileR.readLine();
    qDebug() <

(2使用文本流阅读)使用文本流阅读/编写文本文件编写文本文件编写文本文件

QTextStream类提供了一个方便的读取接口/写入可用于写入可在中使用的文本的文本写入可用于在中找到的文本QIODevice、QByteArray和QString该操作在使用时执行QTextStream流运算符,允许轻松读取流运算符,允许轻松读取流运算符/写单词、行和数字。写单词、行和数字。写出单词、行和数字。 示例程序如下所示。示例程序如下所示。示例过程如下所示。示例程序如下所示。

//使用QTextStream文本流读取文件文本流读取文件文本流读取文件
QFile fileW("test.txt");
if (!fileW.open(QIODevice::WriteOnly | QIODevice::Text))
    return -1;
QTextStream out(&fileW);
out << "first line" << "

second line"; fileW.close();

//使用QTextStream文本流写入文件文本流写入文件文本流写入文件
QFile fileR("test.txt");
if (!fileR.open(QIODevice::ReadOnly | QIODevice::Text))
    return -1;
QTextStream in(&fileR);
while (!in.atEnd())
{
    QString line = in.readLine();
    qDebug() <

可以使用seek()要定位到指定位置,使用atEnd()确定是否仍有可读取的数据。如果调用flush()函数,QText­Stream将清除写缓冲区中的所有数据,并调用设备的flush()函数。

在内部,QTextStream使用a使用a使用aUnicode说“不”就好说不就好了说“不”就行了说不就得了QTextStream使用QTextCodec以自动支持不同的字符集。 默认情况下,默认情况下使用,默认情况下使用QTextCodec ::codecForLocale()返回的编码可用于读写,也可以使用setCodec()函数来设置编码。函数来设置代码。

(3使用数据流读取)使用数据流读取/写入二进制数据写入二进制数据

QDataStream类实现的类将QIODevice二进制数据序列化。数据流是完全独立于主机操作系统的二进制编码信息流,CPU和字节顺序。和字节顺序。和字节顺序。 数据流也可以读取数据流/写入未编码的原始二进制数据。写入未编码的原始二进制数据。写入未编码的原始二进制数据。写入未编码的原始二进制数据。QDataStream类可以实现类可以实现类可以实现C+ +基本数据类型的序列化,例如基本数据类型的序列化,如char、Sh〇rt、im和char*等。而串行化更复杂的数据,是通过将数据分解为基本的数据类型来完成的。示例程序如下所示。示例程序如下所示。示例过程如下所示。示例程序如下所示。

//使用QTextStream文本流读取文件文本流读取文件文本流读取文件
QFile fileW("test.txt");
if (!fileW.open(QIODevice::WriteOnly))
    return -1;
QDataStream out(&fileW);
//序列化字符串(写入时,需要强制转换为QString(类型,否则写是乱码)(类型,否则写是乱码)
out << QString("the answer is");
//序列化整数序列化整数序列化整数
out << static_cast(42);
fileW.close();

//使用QTextStream文本流写入文件文本流写入文件文本流写入文件
QFile fileR("test.txt");
if (!fileR.open(QIODevice::ReadOnly))
    return -1;
QDataStream in(&fileR);
QString str;
qint32 num;
in >> str >> num;
qDebug() << str << num; //输出:"the answer is" 42
fileR.close();

写入数据流的每个条目使用取决于条目类型的预定义格式写入。(否则写入将被篡改) 支持的 Qt 类型包括 QBrush、QColor、QDateTime、QFom、QPixmap、 QString、QVariant以及许多其他格式。

三、文件信息三、文件信息三、文件信息 QFilelnfo

QFilelnfo类提供独立于系统的文件信息,包括文件名、文件在文件系统中的位置(路径)、对文件的访问权限以及文件是目录还是符号链接 。QFilelnfo您还可以获取文件的大小和上次修改/读取时间,还可以获取Qt资源信息资源信息 。 QFilelnfo指向的文件可以在中找到指向的文件可以在中找到QFileinfo对象是在生成对象时设置的,或者稍后使用对象是在生成时设置的,或者稍后使用setFile()来设置。

  • QFileInfo可以使用Relative(可以使用Relative(relative)路径或绝对(路径或绝对(absolute第九节第9节第九部分第九章makeAbsolute()要将相对路径转换为绝对路径,请执行以下操作。
  • 文件类型可以使用更改,文件类型可以使用isFile()、isDir()和isSymLink()来获取。 可以单独使用您可以使用您可以使用每个您可以使用path()和fileName()获取文件的路径和文件名,并使用baseName()要获取文件名中的基本名称,请使用suffix()以获取文件名的后缀。以获取文件名后缀。 使用completeSuffix()如何长期维护你的网络如何长期维护您的网络如何长期维护你的网络?如何长期维持你的网络
  • 文件的日期可以使用created()、lastModified()和lastRead()来返回;
  • 访问权限可使用访问权限使用访问权限可用访问权限可使用isReadable()、isWritable()和isExecutable()来获取;
  • 文件的所有权可以使用文件的所有权来完成文件的所有权可以使用owner()、ownerId()、group()和groupId()来获取。

新建Qt5名为控制台应用程序的控制台应用程序名为控制台应用程序myFile创建完成后,main.cpp文件的文本应为

#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 以只写模式打开以只写模式打开以只写模式打开,如果文件不存在,那么会创建该文件
    QFile file("myfile.txt");
    if (!file.open(QIODevice::WriteOnly  | QIODevice::Text))
        qDebug() << file.errorString();
    file.write("helloQt!

yafeilinux"); file.close();

    // 获取文件信息获取文件信息获取文件信息
    QFileInfo info(file);
    qDebug() << QObject::tr("绝对路径。绝对路径。") << info.absoluteFilePath() << endl
             << QObject::tr("文件名:") << info.fileName() << endl
             << QObject::tr("基本的名字。基本名称。") << info.baseName() << endl
             << QObject::tr("后缀:") << info.suffix() << endl
             << QObject::tr("创建于。创建于。创建时间。") << info.created() << endl
             << QObject::tr("大小:") << info.size();

    // 以只读方式打开以只读模式打开以只读方式打开以只读模式打开以只读方式打开以只读模式打开以只读方式打开
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        qDebug() << file.errorString();
    qDebug() << QObject::tr("文档内容。文件内容。文档的内容。") << endl << file.readAll();
    qDebug() << QObject::tr("当前位置。当前位置。") << file.pos();
    //不要吹牛不要吹嘘别吹牛不要炫耀0
    file.seek(0);
    QByteArray array;
    array = file.read(5);
    qDebug() << QObject::tr("前5个字符:") << array
             << QObject::tr("当前位置。当前位置。") << file.pos();
    //不要吹牛不要吹嘘别吹牛不要炫耀15
    file.seek(15);
    array = file.read(5);
    qDebug() << QObject::tr("第16-20个字符:") << array;
    file.close();

    return a.exec();
}

执行该程序,控制台输出如下所示。

"绝对路径。绝对路径。" "D:/Project/C++/Qt/myFile/build-myFile-Desktop_Qt_5_9_7_MinGW_32bit-Debug/myfile.txt"
"文件名:" "myfile.txt"
"基本的名字。基本名称。" "myfile"
"后缀:" "txt"
"创建于。创建于。创建时间。" QDateTime(2019-06-17 16:58:01.230 中国标准时间(中时) Qt::TimeSpec(LocalTime))
"大小:" 20
"文档内容。文件内容。文档的内容。"
"helloQt!

yafeilinux" "当前位置。当前位置。" 20 "前5个字符:" "hello" "当前位置。当前位置。" 5 "第16-20个字符:" "linux"

四、临时文件四、临时文件四、临时文件 QTemporaryFile

QTemporaryFile类是用于操作临时文件的类是用于操作临时文件的类是用于操作的临时文件I/O设备,它可以安全地创建唯一的临时文件。当呼叫时open()当该函数被销毁时,将创建一个临时文件,并确保该临时文件的文件名是唯一的,并且当QTemporaryFile对象,则该文件将被自动删除。对象,则会自动删除该文件。

在调用open()函数,默认为使用函数,默认为使用函数,默认为使用QIODevice::ReadWrite模式,您可以像下面的代码模式一样使用它,也可以像下面的代码一样使用它QTemporaryFile类:

QTemporaryFile file;
if (file.open()) 
{
    // 在这里操作临时文件。在这里,临时文件被操纵。file.fileName()可以返回唯一的文件名可以返回唯一的文件名可以返回唯一的文件名
}

在调用了close()功能并重新打开功能,然后重新打开功能,然后重新打开QTemporaryFile首先,“清楚地确定你的网络中哪些人需要优先考虑,”营销战略家、“重塑自我”一书的作者多里-克拉克说.她建议将你的联系人“分为几类”--例如,现有客户、潜在客户、有影响力和有权势的同事,以及“真正有联系的朋友”--然后再考虑如何最好地分配你的注意力.哈佛商学院教授、“学会爱上网络”(第二章)的作者之一弗朗西斯卡-吉诺(Francesca Gino)补充说,但优先事项并不总是很明确.可能有些人你保持联系的原因不外乎是你喜欢他们的公司或者你们有类似的兴趣.“想想你的关系是如何使[你]过得更好的.如果你和某个朋友或同事交谈时,你是一个更快乐的人,那就定期这样做,”她说. 只要QTemporaryFile对象,则唯一的临时文件将始终存在并由QTemporaryFile内部仍是开放的。默认情况下,临时文件在系统的临时目录中生成。 此目录的路径可以使用此目录的路径进行访问QDir::tempPath()来获取。

转载于:https://www.cnblogs.com/linuxAndMcu/p/11040201.html

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门