ファイルとデータストリーム関数

QIODevice クラスは、Qt のすべての I/O デバイスの基本インターフェイス・クラスです。 Qt CoreQIODevice は、データブロックの読み書きをサポートするデバイスの共通実装と抽象インターフェースの両方を提供します。デバイスには、メモリ・バッファ、ファイル、データストリームがあります。

QFile のようないくつかのサブクラスは、データの中間的な格納にメモリ・バッファを使用して実装されています。これにより、読み取り/書き込み操作が削減され、プログラムが高速化される。getChar ()やputChar ()のような関数は、デバイスそのものを直接操作するのではなく、メモリ・バッファ上で操作できるため、バッファリングによって高速化される。

QFile クラスは、ファイルからの読み込みとファイルへの書き込みを行う関数を提供する。QFile は単体で使うこともできるが、QTextStreamQDataStream と一緒に使うとより便利である。

QBuffer を使うと、 インタフェースを使って にアクセスできます。 は標準的なランダム・アクセス・ファイルと同じように扱われます。例を挙げよう:QIODevice QByteArray QByteArray

QBuffer buffer;
char ch;

buffer.open(QBuffer::ReadWrite);
buffer.write("Qt rocks!");
buffer.seek(0);
buffer.getChar(&ch);  // ch == 'Q'
buffer.getChar(&ch);  // ch == 't'
buffer.getChar(&ch);  // ch == ' '
buffer.getChar(&ch);  // ch == 'r'

open() を呼び出してバッファを開く。次に、write() またはputChar() を呼び出してバッファに書き込み、read(),readLine(),readAll(),getChar() を呼び出してバッファから読み込む。size() はバッファの現在のサイズを返し、seek() を呼び出すことで、バッファ内の任意の位置にシークすることができる。バッファへのアクセスが終わったら、close() を呼び出します。

QDataStream クラスは、QIODevice へのバイナリ・データのシリアライズを提供します。 データ・ストリームは、ホスト・コンピュータのオペレーティング・システムやCPU、バイト順序に100%依存しない、エンコードされた情報のバイナリ・ストリームです。例えば、Windows上のPCで書き込まれたデータ・ストリームは、Solarisを実行しているSun SPARCで読むことができる。また、データ・ストリームを使用して、エンコードされていない生のバイナリ・データを読み書きすることもできる。

QDataStream でシリアライズできるデータ型の詳細については、Qt データ型のシリアライズを参照してください。

QTextStream クラスは、テキストの読み書きに便利なインタフェースを提供します。QTextStream は、QIODeviceQByteArrayQString を操作することができます。QTextStream のストリーミング演算子を使用すると、単語、行、数値の読み書きを便利に行うことができます。また、QTextStream を使って、コンソール入力を読み込んだり、コンソール出力を書き込んだりするのも一般的です。

テキスト・ファイルを読むときにQTextStream を使う一般的な方法は3つあります:

  • readLine ()またはreadAll ()を呼び出すことにより、チャンクごとに。
  • QTextStream は、QStrings、QByteArrays、char* バッファへのストリーミングをサポートしています。単語はスペースで区切られ、先頭の空白は自動的にスキップされる。
  • 文字単位。QChar または char 型にストリーミングする。この方法は、文字エンコーディングや行末のセマンティクスに依存せず、ファイル解析時に便利な入力処理を行うためによく使われる。空白をスキップするには、skipWhiteSpace() を呼び出す。

QByteArray は、生のバイト( を含む)と従来の 8 ビット ' \0' 終端文字列の両方を格納するために使用できます。 を使用すると、const char * を使用するよりもはるかに便利です。また、\0 QByteArray 暗黙的な共有クラス(copy-on-write)を使用することで、メモリ使用量を削減し、不要なデータコピーを避けることができます。

QByteArray に加えて、Qt は文字列データを格納するためにQString クラスも提供しています。ほとんどの目的には、QString が最も適切なクラスです。これは16ビットのUnicode文字を格納します。しかし、未加工のバイナリ・データを格納する必要がある場合や、メモリの節約が重要な場合(Qt for Embedded Linuxなど)には、QByteArray を使用することをお勧めします。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.