Qtにおけるファイル操作

QtでのIO操作

IO操作の基本

Qtは、ファイルや外部デバイスとのやり取りを統一されたインターフェースで提供しており、ファイルも一種の外部デバイスとして扱います。この設計により、IO操作の実装が簡潔かつ柔軟になります。

IO操作の重要な関数

IO処理の本質は、連続領域におけるデータの読み書きです。Qtでは、QIODeviceクラスを基底として、さまざまなデバイスに対して一貫した操作を提供しています。

ストレージデバイスの種類

  • 順次ストレージデバイス:データの読み書きは先頭から順番に行われ、任意位置へのアクセスはできません(例:シリアルポート)
  • ランダムストレージデバイス:任意の位置にアクセスして読み書きが可能(例:ファイル)

Qtのファイル操作クラス

QFileクラス

QFileはQtにおけるファイル操作の主要クラスです。システム上の特定ファイルを表し、読み込み・書き込み・削除などの操作が可能です。

QFileInfoクラス

QFileInfoクラスは、ファイルの属性情報を取得するためのクラスです。例えば、ファイルの存在確認、読み込み・書き込み権限、作成日時、最終アクセス日時などの情報を取得できます。

サンプルコード

#include <QtCore/QCoreApplication>
#include <QFile>
#include <QString>
#include <QDebug>
#include <QFileInfo>
#include <QDateTime>

void writeFile(QString path)
{
    QFile file(path);

    if(file.open(QIODevice::ReadWrite | QIODevice::Text))
    {
        file.write("ABCDEFG\n");
        file.write("ABCDEFG");
        file.close();
    }
}

void readFile(QString path)
{
    QFile file(path);
    if(file.open(QIODevice::ReadWrite | QIODevice::Text))
    {
        QByteArray data = file.readLine();
        QString content(data);
        qDebug() << content;

        file.close();
    }
}
void showInfo(QString path)
{
    QFileInfo fileInfo(path);
    qDebug() << fileInfo.exists();
    qDebug() << fileInfo.isFile();
    qDebug() << fileInfo.isReadable();
    qDebug() << fileInfo.isWritable();
    qDebug() << fileInfo.created();
    qDebug() << fileInfo.lastRead();
    qDebug() << fileInfo.lastModified();
    qDebug() << fileInfo.path();
    qDebug() << fileInfo.fileName();
    qDebug() << fileInfo.suffix();
    qDebug() << fileInfo.size();
}

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    QString filePath = "F:/Qt/lesson32/text.txt";

    writeFile(filePath);
    readFile(filePath);
    showInfo(filePath);

    return app.exec();
}

QTemporaryFileクラス

Qtは一時ファイル操作のためにQTemporaryFileクラスを提供します。

  • グローバルに一意の一時ファイルを安全に作成します。
  • オブジェクトが破棄されると、対応する一時ファイルも自動的に削除されます。
  • デフォルトのオープンモードはQIODevice::ReadWriteです。
  • 主に大容量データの受け渡しやプロセス間通信に使用されます。

QTemporaryFile利用例

#include <QtCore/QCoreApplication>
#include <QTemporaryFile>
#include <QFileInfo>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    QTemporaryFile temp;
    if(temp.open())
    {
        temp.write("D.T.Software");
        temp.close();
    }

    QFileInfo info(temp);
    qDebug() << info.isFile();
    qDebug() << info.path();
    qDebug() << info.fileName();

    return app.exec();
}

まとめ

  • Qtでは、ファイルとデバイスの読み書きを統一された方法で扱います。
  • IOデバイスは順次ストレージとランダムストレージの2種類があります。
  • QFileクラスはファイル操作の主要な手段です。
  • QFileInfoクラスでファイル属性を取得できます。
  • QTemporaryFileクラスは一時ファイル操作に便利です。

タグ: Qt qfile QFileInfo QTemporaryFile IO操作

7月23日 22:03 投稿