Qt Creator Modul Lerndateien, Verzeichnisse und Eingabe / Ausgabe (1)

Qt Creator Modul Lerndateien, Verzeichnisse und Eingabe / Ausgabe (1)

1. Dateien und Verzeichnisse

1. Eingabe- / Ausgabegeräte

Die QIODevice-Klasse ist die grundlegende Schnittstellenklasse aller E / A-Geräte in Qt. Beispielsweise bieten QFile, QBuffer und QTcpSocket eine abstrakte Schnittstelle für Geräte, die das Lesen / Schreiben von Datenblöcken unterstützen.
Während des gesamten Prozesses öffnen wir das Gerät häufig über die Funktion open () und müssen den richtigen Öffnungsmodus angeben. Alle offenen Modi in QIODevice werden durch den Aufzählungstyp QIODevice :: OpenMode definiert. Sie können den Wert selbst finden, es gibt zu viele ...
Nehmen wir nur einige Beispiele

Konstante Beschreibung
QIODevice::NotOpen Gerät ist nicht eingeschaltet
QIODevice :: ReadOnly Das Gerät ist schreibgeschützt geöffnet und kann nicht geschrieben werden
QIODevice :: WriteOnly Das Gerät wird im Nur-Schreib-Modus geöffnet und ist nicht lesbar
QIODevice :: ReadWrite Offen zum Lesen und Schreiben
QIODevice :: Anhängen Im Anhänge-Modus öffnen (am Ende der Datei)
QIODevice :: Abschneiden Wenn möglich, wird das Gerät vor dem Öffnen abgeschnitten, und der vorherige Inhalt des Geräts geht ebenfalls verloren
QIODevice :: Text Beim Lesen wird der Zeilenende-Terminator in "/ n" konvertiert, beim Schreiben wird der Zeilenende-Terminator in lokale Codierung konvertiert
QIODevice :: ungepuffert Umgehen Sie alle Puffer des Geräts

Schließen Sie das Gerät nach dem Schreiben und Lesen mit close ().
QIODevice kann zwischen Geräten, sequentiellen Speichergeräten und zufälligen Speichergeräten unterscheiden.
Die Zufallsspeichervorrichtung kann an jeder Position durch die Funktion seek () definiert werden, und die aktuelle Position kann auch mit der Funktion pos () erhalten werden. Wird für QFile, QBuffer verwendet.
Das sequentielle Speichergerät kann keinen Bereich lokalisieren, und die Daten müssen für QTcpStock, QProcess einmal gelesen werden.

Die Funktion isSequential () bestimmt den Gerätetyp im Programm.

QTcpStock und QProcess sind zwei große Module, wir sprechen jetzt über QFile.

2. Dateivorgänge

Die QFile-Klasse bietet eine Schnittstelle zum Lesen / Schreiben von Geräten. Sie kann Textdateien, Binärdateien und Qt-Ressourcen-E / A-Geräte lesen / schreiben. QFile kann alleine verwendet werden, wird jedoch der Einfachheit halber häufig in Kombination mit QTextStream / QDataStream verwendet.

Die QFileInfo-Klasse soll systemunabhängige Dateiinformationen wie Größe, Name und Speicherort bereitstellen.

#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();
}

Die Ergebnisse sind wie folgt:
Fügen Sie hier eine Bildbeschreibung ein

3. Verzeichnisoperationen

Die QDir-Klasse wird verwendet, um auf die Verzeichnisstruktur und ihren Inhalt zuzugreifen, und kann auch auf den Operationspfadnamen, den Zugriffspfad und dateibezogene Informationen zugreifen.
Nehmen wir ein Beispiel:
Ziehen Sie ein Listen-Widget in mainwindow.ui und
fügen Sie dann private Objekte in die .h-Datei ein:

#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("文件发生改变"));
    }
}

Jeder kann für sich fühlen.

Ich denke du magst

Origin blog.csdn.net/m0_50210478/article/details/108143782
Empfohlen
Rangfolge