(十四)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, ...
随机推荐
- 编程语言 Node.js中使用到的npm工具
啥是npm? npm就是(node package manager)包结点管理器,它随同Node.js一起安装的,由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了. 同样可以通过输 ...
- Web后端 JAVA学习之路
1.Java分类 Java按应用来分,可以分为J2ME(手机版),J2SE(标准版),J2EE(企业版)三部分. ・J2ME:已经被安卓开发取代. ・J2SE:Java的核心类,其中包括桌面应用,但一 ...
- [C#学习笔记3]关于Main(string[ ] args)中args命令行参数
Main(string[] args)方法是C#程序的入口,程序从这里开始执行,在这里结束.C#代码逻辑要包含在一个类型(Type)中,游离的.全局的变量或函数是不存在的,这里的类型包括类(class ...
- 【Android】用Cubism 2制作自己的Live2D——android sdk样本的下载与Android studio编译!
前言- 在浏览Live2d说明书的时候我无意中发现了一个有趣的东西,就是android sdk中居然自带动态壁纸!那就让我们来试试吧,说明书此页的网址连接——中文版||日文版 Android开发所必需 ...
- 【Android】用Cubism 2制作自己的Live2D——软件的安装与破解!
前言- 上文我们简单的了解了Cubism的情况,但是Cubism 2.X安装好以后如果不进行破解只能使用Free版本,这是我们接受不了的,我们是专业的.是来学习的,怎么能不用Pro版本呢?所以话不多说 ...
- Play vue.js with constant value in SailsJS
SailsJS supplies a utility module called parasails, which defines two elements, <ajax-form> an ...
- jquery实现静态柱形图(写死的数据,只为系统首页UI更美观)
这段时间比较空闲,便阅读公司做好的项目的源代码,学习学习同事的开发思路. 在项目中使用图表可以很好地提高人机交互的友好度,开发的时候看到项目的首页有两个很小的柱形图,很漂亮,便找到对应的代码看了看,发 ...
- Windows Server(r12) - 配置 MySQL 远程访问
Windows Server(r12) - 配置 MySQL 远程访问 工作主要为两部分, 一部分是 Windows 防火墙, 一部分是 MySQL 自身 Windows 端口远程访问 其实就是在 W ...
- Python基础之字典
字典初识 字典的认识 首先,我们来认识一下字典: # 定义一个字典 user_dict = {"name": "zhangsan", "age&quo ...
- VSCode 配置并使用less
1.安装node.js 2.安装less npm install less -g 3.安装VS插件 Easy LESS 4.编辑保存.less文件,会在对应的目录下生成对应的.css文件