(十四)QFile操作,QByteArray,文件流操作,QTextStream,QDataStream,QFileInfo, QIODevice
QFile f
1.readall
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->selectFile, &QPushButton::clicked, this, [=](){
QString filename = QFileDialog::getOpenFileName(this,"open file","d:\\");
if (filename.isEmpty()) {
QMessageBox::warning(this,"warnnig","select file failed");
return;
}
ui->lineEdit->setText(filename); // 创建文件对象
// 默认读取文件格式:utf8
QFile file(filename);
//QTextCodec* codec = QTextCodec::codecForName("gbk");
// 指定打开方式
bool isOk = file.open(QFile::ReadOnly);
if (!isOk) {
QMessageBox::critical(this,"ERROR","file open failed");
return;
}
// 读文件
QByteArray array = file.readAll();
// 显示到文本框
//ui->textEdit->setText(codec->toUnicode(array));
ui->textEdit->setText(array);
// 关闭文件
file.close();
}); } Widget::~Widget()
{
delete ui;
}
2.readline
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->selectFile, &QPushButton::clicked, this, [=](){
QString filename = QFileDialog::getOpenFileName(this,"open file","d:\\");
if (filename.isEmpty()) {
QMessageBox::warning(this,"warnnig","select file failed");
return;
}
ui->lineEdit->setText(filename); // 创建文件对象
// 默认读取文件格式:utf8
QFile file(filename);
//QTextCodec* codec = QTextCodec::codecForName("gbk");
// 指定打开方式
bool isOk = file.open(QFile::ReadOnly);
if (!isOk) {
QMessageBox::critical(this,"ERROR","file open failed");
return;
}
// 读文件
QByteArray array;
while(!file.atEnd()) {
array += file.readLine();
}
// 显示到文本框
//ui->textEdit->setText(codec->toUnicode(array));
ui->textEdit->setText(array);
// 关闭文件
file.close();
}); } Widget::~Widget()
{
delete ui;
}
readline
QByteArray
https://blog.csdn.net/ecourse/article/details/80575691
QByteArray就是一个字节数组。类似于unsigned char[],什么数据都能保存。
而QString是一个字符串,其内部其实也是unsigned char[],但是这个数组是用于保存unicode字符的数组。对QString进行操作的时候,是按照字符串的角度来进行调用的。QString自动完成了一些字符串到字节数组的转换工作。
文件流
1、文本流 QTextStream
操作的数据类型:基础数据类型:int ,float ,string
侧重于文本的读写
属于轻量级的流操作
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>
#include <QTextStream>
#include <QDataStream> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->selectFile, &QPushButton::clicked, this, [=](){
QString filename = QFileDialog::getOpenFileName(this,"open file","d:\\");
if (filename.isEmpty()) {
QMessageBox::warning(this,"warnnig","select file failed");
return;
}
ui->lineEdit->setText(filename); // 创建文件对象
// 默认读取文件格式:utf8
QFile file(filename);
//QTextCodec* codec = QTextCodec::codecForName("gbk");
// 指定打开方式
bool isOk = file.open(QFile::ReadOnly);
if (!isOk) {
QMessageBox::critical(this,"ERROR","file open failed");
return;
} QTextStream stream(&file); // 设置IO设备给流对象
QString array;
while(!stream.atEnd()) {
array += stream.readLine();
} // 显示到文本框
//ui->textEdit->setText(codec->toUnicode(array));
ui->textEdit->setText(array);
// 关闭文件
file.close();
}); } Widget::~Widget()
{
delete ui;
}
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>
#include <QTextStream>
#include <QDataStream>
#include <QDebug> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this); QFile f("D:\\aaa.txt");
f.open(QFile::WriteOnly);
QTextStream txt(&f);
// 写文件
txt << QString("hello; world") << ;
f.close(); QString buf;
f.open(QFile::ReadOnly);
txt.setDevice(&f);
txt >> buf;
qDebug() << buf.toUtf8().data(); //hello;
}
Widget::~Widget() { delete ui; }
2、数据流 QDataStream
操作的数据类型:QImage,QPoint,QRect,不依赖于平台
侧重于数据格式和类型
QTextStream 能做的事,QDataStream 都能做
可以对特定格式的数据类型进行完美的输入输出
几乎Qt 支持的所有数据类型都可以使用QDataStream 进行操作
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>
#include <QTextStream>
#include <QDataStream>
#include <QDebug> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this); // QFile f("D:\\aaa.txt");
// f.open(QFile::WriteOnly);
// QTextStream txt(&f);
// // 写文件
// txt << QString("hello; world") << 123456;
// f.close(); // QString buf;
// f.open(QFile::ReadOnly);
// txt.setDevice(&f);
// txt >> buf;
// qDebug() << buf.toUtf8().data();
QFile f("D:\\aaa.txt");
f.open(QFile::WriteOnly);
QDataStream txt(&f);
// 写文件
txt << QString("hello; world") << ;
f.close(); QString buf;
int num;
f.open(QFile::ReadOnly);
txt.setDevice(&f);
txt >> buf >> num;
qDebug() << buf.toUtf8().data() << num; // hello; world 123456
} Widget::~Widget()
{
delete ui;
}
QImage image("d:\\up.png");
QByteArray arr;
QDataStream ss(&arr,QIODevice::ReadWrite);
ss << image;
qDebug() << arr;
QFileInfo
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>
#include <QTextStream>
#include <QDataStream>
#include <QDebug>
#include <QFileInfo>
#include <QDateTime> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QFileInfo info("d:\\up.png");
qDebug() << info.size();
qDebug() << info.path();
qDebug() << info.lastModified().toString("yyyy-mm-dd");
} Widget::~Widget()
{
delete ui;
}
15378
"d:/"
"2018-28-28"
QIODevice

(十四)QFile操作,QByteArray,文件流操作,QTextStream,QDataStream,QFileInfo, QIODevice的更多相关文章
- delphi 基础之三 文件流操作
文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...
- c#基础语言编程-文件流操作
引言 在System.IO 命名空间下提供了一系列的类,我们可以通过相应的类进行文件.目录.数据流的操作. 1.File类:提供用于创建.复制.删除.移动和打开文件的静态方法.File类 2.File ...
- .NET中的IO操作之文件流
读操作 //1.创建文件流 FileStream fsRead =new FileStream("1.txt",FileMode.Open); //2.创建缓冲区,正常情况下,是不 ...
- .NET中的IO操作之文件流(一)
读操作 //1.创建文件流 FileStream fsRead =new FileStream("1.txt",FileMode.Open); //2.创建缓冲区,正常情况下,是不 ...
- (C/C++学习)2.C语言中文件流操作基本函数总结
函数所在头文件:stdio.h 说明:前半部分主要为对各个文件流操作函数的例举,后半部分着重于上机运行分析.文中部分引用自王桂林老师的C/C++课件. 1.FIELE *fopen(const cha ...
- 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习
孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...
- Python—集合的操作、文件的操作
1.集合的操作 2.文件的操作 1.集合的操作 定义: 1.不同元素组成,自动去重 2.无序 3.集合中的元素必须是不可变类型 1.集合的定义: >>> s1 = set('abcd ...
- c++ ofstream & ifstream文件流操作
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; //ofstream & ifstream inherit from istream class ...
- ndk学习之c++语言基础复习----C++容器、类型转换、异常与文件流操作
继续来复习C++,比较枯燥,但是这是扎实掌握NDK开发的必经之路,不容小觑. 容器: 容器,就是用来存放东西的盒子. 常用的数据结构包括:数组array, 链表list, 树tree, 栈stack, ...
随机推荐
- Java内存区域和内存溢出异常
前言 对于java程序员来说,在虚拟机自动内存管理的机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出的问题,由虚拟机管理内存,这一切看起来都很 ...
- Dynamics 365-关于Solution的那些事(二)
接着上一篇的说,现在有一个已知前提:Solution的增量特性.然后我们再思考这么一个场景,项目开发过程中,存在多次迭代的情况,每次迭代可能涉及到的solution是同一个,唯一区别的,就是solut ...
- 逐个使用C++11新特性
C++11 auto & decltype auto:根据变量初始值来推导变量类型,并用右值初始化变量. decltype:从表达式推导出类型,并将变量定义为该类型,但不用表达式的值初始化该变 ...
- git在本地向远程仓库创建分支
在本地的仓库种,如果想给upstream创建新分支并关联,需要执行 git push -u/--set-upstream 远程仓库名 远程分支名
- 字符串转数字练习--String to Integer (atoi)
Implement atoi which converts a string to an integer. The function first discards as many whitespace ...
- kali的网络服务
1.启动Apache: service apache2 start 关闭: service apache2 stop 将Apache2服务添加到自动启动的程序组里: update-rc.d apach ...
- python3 员工信息表
这是最后一条NLP了......来吧 十二,动机和情绪总不会错,只是行为没有效果而已 动机在潜意识里,总是正面的.潜意识从来不会伤害自己,只会误会的以为某行为可以满足该动机,而又不知道有其他做法的可能 ...
- android申请多个权限的正确姿势
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permi ...
- 从Python越来越想放弃的Day09
今天在学几个新东东,又向py迈了一大步,依旧是从简单的开始,三元运算,又称三目运算,所谓三目,也就是二郎神,跑题了,简单的格式为v = 前面 if 条件 else 后面,条件为True时,则v = 前 ...
- 关于H5从PC端切换到移动端,屏幕显示内容由横向转为竖向的研究!
1.前言: 在项目中,我们常会遇见在手机端需要横屏观看的效果,而在pc端则默认切换到竖屏的样式. 或者是,UI提供的图是一个长图,但是在移动端我们需要让这个图在手机横屏时显示. 以上两个都需要我们实行 ...