(十四)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, ...
随机推荐
- C# 委托还能这样用
一直找不到一种能够让很多对象都能在几乎同时接收到通知的方法.介绍下目前在用的,希望能够抛砖引玉. 首先随便贴一下观察者模式的两接口,观察者模式自行搜索设计模式. public interface IS ...
- Spring SpringMVC MyBatis配置笔记
工程大致结构: project |-src |----pojo |--------Temp.java |----dao |--------TempDao.java |--------TempDao.x ...
- 前端入门20-JavaScript进阶之异步回调的执行时机
声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...
- Django 提交 form 表单(使用sqlite3保存数据)
优化 提交 form 表单,https://www.cnblogs.com/klvchen/p/10608143.html 创建数据库的字段,在 models.py 中添加 from django.d ...
- js 格林威治时间转正常格式并兼容ios
function timeChange(time) { var date = time.substr(0, 10); //年月日 var hours = time.substring(11, 13); ...
- Dynamics 365-关于Solution的那些事(三)
这一篇的内容,是关于Solution的使用建议的,如果大家有什么实用的建议,欢迎留言讨论. 一. 版本控制 Solution是有版本号的,率性的人可能在新建一个solution的时候,直接赋值1.0, ...
- Android探究之ANR
什么是ANR ANR:Application Not Responding,即应用程序无响应. 在Android中,ActivityManagerService(简称AMS)和WindowManage ...
- vscode指定扩展安装位置
默认情况下,(Windows)vscode的安装路径为C:\Users\用户名\.vscode\extensions. 如果想要自定义扩展的安装路径,无法直接在vscode中修改.但是,在启动vsco ...
- mysql export mysqldump version mismatch upgrade or downgrade your local MySQL client programs
I use MySQL Community Edition and I solved this problem today. goto https://dev.mysql.com/downloads/ ...
- 使用jsp,tag提取字符串中的单词
JSP中调用Tag在表单中输入字符串,提取其中的单词 参考代码:giveString.jsp <%@ page contentType="text/html; charset=GB23 ...