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クラスは一時ファイル操作に便利です。