目录
- QIODevice:所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口;
- QFileDevice:Qt5新增加的类,提供了有关文件操作的通用实现。
- QFlie:访问本地文件或者嵌入资源;
- QTemporaryFile:创建和访问本地文件系统的临时文件;
- QBuffer:读写QbyteArray, 内存文件;
- QProcess:运行外部程序,处理进程间通讯;
- QAbstractSocket:所有套接字类的父类;
- QTcpSocket:TCP协议网络数据传输;
- QUdpSocket:传输 UDP 报文;
- QSslSocket:使用 SSL/TLS 传输数据;
- 基本文件操作:
QFile提供了从文件中读取和写入数据的能力。我们通常会将文件路径作为参数传给QFile的构造函数。不过也可以在创建好对象最后,使用setFileName()来修改。QFile主要提供了有关文件的各种操作,比如打开文件、关闭文件、刷新文件等。我们可以使用QDataStream或QTextStream类来读写文件,也可以使用QIODevice类提供的read()、readLine()、readAll()以及write()这样的函数。值得注意的是,有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过QFileInfo获取
readFile:
void Widget::on_buttonRead_clicked()
{
QString path=QFileDialog::getOpenFileName(this,
"open","../document","TXT(*.txt)");
if(path.isEmpty()==false)
{
//文件对象
QFile file(path);
//打开文件,只读方式
bool isok=file.open(QIODevice::ReadOnly);
if(isok==true)
{
#if 0
//读文件,默认只识别utf8编码
QByteArray array=file.readAll();
//显示到编辑区
//ui->textEdit->setText(QString(array));
ui->textEdit->setText(array);
#endif
QByteArray array;
while(file.atEnd()==false)
{
//读一行
array += file.readLine();
}
ui->textEdit->setText(array);
}
//关闭文件
file.close();
}
}
writeFile:
void Widget::on_buttonWrite_clicked()
{
QString path=QFileDialog::getSaveFileName(this,
"save","../document","TXT(*.txt)");
if(path.isEmpty()==false)
{
//创建文件对象,并关联文件名字
QFile file;
file.setFileName(path);
//打开文件,只写方式
bool isok=file.open(QIODevice::WriteOnly);
if(isok==true)
{
//获取编辑区内容
QString str=ui->textEdit->toPlainText();
//写文件
file.write(str.toUtf8());
}
file.close();
}
}
- 二进制文件读写:
QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。例如,在安装了 Windows 平台的 PC 上面写入的一个数据流。可以直接读写没有编码的二进制数据,例如图像、视频、音频等。QDataStream既能够存取 C++ 基本类型,如 int、char、short 等,也可以存取复杂的数据类型,例如自定义的类。实际上,QDataStream对于类的存储,是将复杂的类分割为很多基本单元实现的。
writeData():
void Widget::writeData()
{
//创建文件对象
QFile file("../document/4.txt");
//打开文件,只写方式打开
bool isok=file.open(QIODevice::WriteOnly);
if(true==isok)
{
//创建数据流,和file文件关联,相当于往文件里写数据
QDataStream stream(&file);
stream << QString("主要看气质") << 250;
file.close();
}
}
在保存的文档里显示乱码,且显示的格式为二进制
readData():
void Widget::readData()
{
//创建文件对象
QFile file("../document/4.txt");
//打开文件,只写方式打开
bool isok=file.open(QIODevice::ReadOnly);
if(true==isok)
{
QDataStream stream(&file);
QString str;
int a;
stream >> str >> a;
qDebug() << str.toUtf8().data() << a;
file.close();
}
}
在控制台上让其显示
- 文本文件读写:
QTextStream会自动将 Unicode 编码同操作系统的编码进行转换,这一操作对开发人员是透明的。它也会将换行符进行转换,同样不需要自己处理。QTextStream使用 16 位的QChar作为基础的数据存储单位,同样,它也支持 C++ 标准类型,如 int 等。实际上,这是将这种标准类型与字符串进行了相互转换。
writeData():
void Widget::writeData()
{
QFile file;
file.setFileName("../document/5.txt");
bool isok=file.open(QIODevice::WriteOnly);
if(true==isok)
{
QTextStream stream(&file);
//指定编码
stream.setCodec("UTF-8");
stream << QString("主要看气质") << 250;
file.close();
}
}
在保存的文档里显示正常,显示的格式为UTF-8
readData():
void Widget::readData()
{
QFile file;
file.setFileName("../document/5.txt");
bool isok=file.open(QIODevice::ReadOnly);
if(true==isok)
{
QTextStream stream(&file);
//指定编码
stream.setCodec("UTF-8");
QString str;
int a;
stream >> str >> a;
qDebug() << str.toUtf8().data() << a;
file.close();
}
}
在控制台上让其显示