(十四)QFile操作,QByteArray,文件流操作,QTextStream,QDataStream,QFileInfo, QIODevice

时间:2022-09-17 08:49:35

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

(十四)QFile操作,QByteArray,文件流操作,QTextStream,QDataStream,QFileInfo, QIODevice的更多相关文章

  1. delphi 基础之三 文件流操作

    文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...

  2. c&num;基础语言编程-文件流操作

    引言 在System.IO 命名空间下提供了一系列的类,我们可以通过相应的类进行文件.目录.数据流的操作. 1.File类:提供用于创建.复制.删除.移动和打开文件的静态方法.File类 2.File ...

  3. &period;NET中的IO操作之文件流

    读操作 //1.创建文件流 FileStream fsRead =new FileStream("1.txt",FileMode.Open); //2.创建缓冲区,正常情况下,是不 ...

  4. &period;NET中的IO操作之文件流(一)

    读操作 //1.创建文件流 FileStream fsRead =new FileStream("1.txt",FileMode.Open); //2.创建缓冲区,正常情况下,是不 ...

  5. &lpar;C&sol;C&plus;&plus;学习&rpar;2&period;C语言中文件流操作基本函数总结

    函数所在头文件:stdio.h 说明:前半部分主要为对各个文件流操作函数的例举,后半部分着重于上机运行分析.文中部分引用自王桂林老师的C/C++课件. 1.FIELE *fopen(const cha ...

  6. 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习

     孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...

  7. Python—集合的操作、文件的操作

    1.集合的操作 2.文件的操作 1.集合的操作 定义: 1.不同元素组成,自动去重 2.无序 3.集合中的元素必须是不可变类型 1.集合的定义: >>> s1 = set('abcd ...

  8. c&plus;&plus; ofstream &amp&semi; ifstream文件流操作

    ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; //ofstream & ifstream inherit from istream class ...

  9. ndk学习之c&plus;&plus;语言基础复习----C&plus;&plus;容器、类型转换、异常与文件流操作

    继续来复习C++,比较枯燥,但是这是扎实掌握NDK开发的必经之路,不容小觑. 容器: 容器,就是用来存放东西的盒子. 常用的数据结构包括:数组array, 链表list, 树tree, 栈stack, ...

随机推荐

  1. android 命名 数组 所有国家 String&lbrack;&rsqb; COUNTRIES

    static final String[] COUNTRIES = new String[] { "Afghanistan", "Albania", &quot ...

  2. C&plus;&plus;的一些小的知识点

    1.初始化: 对于内置类型 ]; // 10个未初始化int ](); // 10个值初始化为0的int 对于自定义类型: 只要一调用new,那么编译器不仅仅给它分配内存,还调用它的默认构造函数初始化 ...

  3. hibernate---注释 ----(购物:人顾客售货员boss)

    package com.ij34.dao; import javax.persistence.*; @Entity @Inheritance(strategy=InheritanceType.JOIN ...

  4. express3&period;0安装并使用layout模板

    转自:http://cnodejs.org/topic/5073989b01d0b801480520e4 1.安装 express-partials. 方法一:运行 cmd 用 npm install ...

  5. HDNOIP201206施工方案

    HDNOIP201206施工方案 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 c国边防军在边境某处的阵地是由n个地堡组成的. ...

  6. 熟悉java堆内存和栈内存和mysql的insert语句中含有id的处理

    java的堆内存和栈内存有什么区别呢? 如果mysql数据库表的id是递增的,如果没有插入id,则id自增,如果插入id,则插入什么就显示什么.

  7. 武汉科技大学ACM :1006&colon; 华科版C语言程序设计教程(第二版)习题7&period;15

    Problem Description 输入n个字符串(n<=100),输出其中最长的串,如果有多个则取最先找到的那一个. Input 多组测试数据. 每组测试数据第一行包含一个整数n,表示一共 ...

  8. SAP MM盘点流程里如何处理事务代码MI11 Recount过的盘点凭证?

    SAP MM盘点流程里如何处理事务代码MI11 Recount过的盘点凭证? 1, MI01 create a physical inventory document, 2, MI04 to inpu ...

  9. windows下Xshell远程访问虚拟机

    下载Xshell 5软件在windows下安装 安装好后Xshell 5启动软件 下一步,检查虚拟机,配置是否正确 下一步,设置网络,保障虚拟机系统能够连接网络 下一步,进入虚拟机系统,检查虚拟机网络 ...

  10. 修改SIP协议中的User-Agent名称

    修改目的:如果user-agent 带上了 GIT 版本信息,容易被人抓住版本漏洞针对性的攻击. 示例如下: SIP/2.0 100 Trying Via: SIP/2.0/UDP 192.168.5 ...