Archivos de aprendizaje, directorios y entrada / salida del módulo Qt Creator (1)

Archivos de aprendizaje, directorios y entrada / salida del módulo Qt Creator (1)

1. Archivos y directorios

1. Dispositivos de entrada / salida

La clase QIODevice es la clase de interfaz básica de todos los dispositivos de E / S en Qt. Por ejemplo, QFile, QBuffer y QTcpSocket proporcionan una interfaz abstracta para dispositivos que admiten la lectura / escritura de bloques de datos.
En todo el proceso, a menudo abrimos el dispositivo a través de la función open () y debemos especificar el modo de apertura correcto. Todos los modos abiertos en QIODevice están definidos por el tipo de enumeración QIODevice :: OpenMode. Puede encontrar el valor usted mismo, hay demasiados ...
Tomemos solo algunos ejemplos

constante descripción
QIODevice :: NotOpen El dispositivo no está encendido
QIODevice :: ReadOnly El dispositivo se abre como de solo lectura y no se puede escribir
QIODevice :: WriteOnly El dispositivo está abierto en modo de solo escritura y no es legible
QIODevice :: ReadWrite Abierto para leer y escribir
QIODevice :: Append Abrir en modo anexar (al final del archivo)
QIODevice :: Truncar Si es posible, el dispositivo se truncará antes de abrirlo y también se perderá el contenido anterior del dispositivo.
QIODevice :: Texto Al leer, el terminador de final de línea se convierte a "/ n", al escribir, el terminador de final de línea se convierte a codificación local
QIODevice :: Sin búfer Omitir todos los búferes del dispositivo

Después de escribir y leer, cierre el dispositivo a través de close ().
QIODevice puede distinguir entre dispositivos, en dispositivos de almacenamiento secuenciales y dispositivos de almacenamiento aleatorios.
El dispositivo de almacenamiento aleatorio se puede definir en cualquier posición a través de la función seek (), y la posición actual también se puede obtener con la función pos (). Se utiliza para QFile, QBuffer.
El dispositivo de almacenamiento secuencial no puede ubicar ningún área, y los datos deben leerse una vez para QTcpStock, QProcess.

La función isSequential () determina el tipo de dispositivo en el programa.

QTcpStock y QProcess son dos grandes módulos, ahora estamos hablando de QFile.

2. Operaciones de archivo

La clase QFile proporciona una interfaz para dispositivos de lectura / escritura. Puede leer / escribir archivos de texto, archivos binarios y dispositivos de E / S de recursos Qt. QFile se puede usar solo, pero para mayor comodidad, a menudo lo usamos en combinación con QTextStream / QDataStream.

La clase QFileInfo es para proporcionar información de archivo independiente del sistema, como tamaño, nombre y ubicación.

#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QStringList>
#include <QCoreApplication>
#include <QFileInfo>
#include <QDebug>
#include <QDateTime>

int main(int argc, char *argv[])
{
    
    
    QApplication a(argc, argv);
    //以只写方式打开,若文件不存在则创建
    QFile file("file.txt");
    if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
        qDebug()<<file.errorString();
    file.write("hello,Qt \angxn!!");
    file.close();
    QFileInfo info(file);
    qDebug()<<QObject::tr("绝对路径:")<<info.absoluteFilePath()<<endl
            <<QObject::tr("文件名:")<<info.fileName()<<endl
            <<QObject::tr("基本名称:")<<info.baseName()<<endl
            <<QObject::tr("后缀:")<<info.suffix()<<endl
            <<QObject::tr("创建时间:")<<info.created()<<endl
            <<QObject::tr("大小:")<<info.size();
    //以只读方式打开
    if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
        qDebug()<<file.errorString();
    qDebug()<<QObject::tr("文件内容:")<<endl<<file.readAll();
    qDebug()<<QObject::tr("当前位置:")<<file.pos();
    file.seek(0);
    QByteArray array;
    array = file.read(5);
    qDebug()<<QObject::tr("前五个字符:")<<array
           <<QObject::tr("当前位置:")<<file.pos();
    file.seek(15);
    array = file.read(5);
    qDebug()<<QObject::tr("第16-20个字符")<<array;
    file.close();
    return a.exec();
}

Los resultados son los siguientes:
Inserte la descripción de la imagen aquí

3. Operaciones de directorio

La clase QDir se utiliza para acceder a la estructura del directorio y su contenido, y también puede acceder al nombre de la ruta de la operación, la ruta de acceso y la información relacionada con el archivo.
Tomemos un ejemplo:
arrastre un widget de lista a mainwindow.ui y
luego agregue objetos privados en el archivo .h:

#include <QFileSystemWatcher>

private:
    QFileSystemWatcher myWatcher;
private slots:
    void showMessage(const QString &path);

main.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    
    
    ui->setupUi(this);
    connect(&myWatcher,&QFileSystemWatcher::directoryChanged,
            this,&MainWindow::showMessage);
    connect(&myWatcher,&QFileSystemWatcher::fileChanged,
            this,&MainWindow::showMessage);
    //显示当前目录下所有文件
    QDir mydir(QDir::currentPath());
    mydir.setNameFilters(QStringList("*h"));
    ui->listWidget->addItem(mydir.absolutePath()+ tr("目录下的.h文件"));
    ui->listWidget->addItems(mydir.entryList());
    //创建目录加入显示器
    mydir.mkdir("mydir");
    mydir.cd("mydir");
    ui->listWidget->addItem(tr("监视目录:")+mydir.absolutePath());
    myWatcher.addPath(mydir.absolutePath());
    //创建文件加入监视器
    QFile file(mydir.absolutePath()+"/myfile.txt");
    if(file.open(QIODevice::WriteOnly)){
    
    
        QFileInfo info(file);
        ui->listWidget->addItem(tr("监视的文件:")+ info.absolutePath());
        myWatcher.addPath(info.absoluteFilePath());
        file.close();
    }
}

MainWindow::~MainWindow()
{
    
    
    delete ui;
}
void MainWindow::showMessage(const QString &path){
    
    
    QDir dir(QDir::currentPath()+"/mydir");
    //如果目录发生改变
    if(path==dir.absolutePath()){
    
    
        ui->listWidget->addItem(dir.dirName()+tr("目录发生改变:"));
        ui->listWidget->addItems(dir.entryList());
    }
    else{
    
    
        ui->listWidget->addItem(path+tr("文件发生改变"));
    }
}

Todos pueden sentir por sí mismos.

Supongo que te gusta

Origin blog.csdn.net/m0_50210478/article/details/108143782
Recomendado
Clasificación