「Qtの基礎 - ファイル」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「== 概要 == ソフトウェアにおいて、ファイルの操作は非常に重要な項目である。<br> テキストファイルやバイナリファイル、画…」) |
|||
91行目: | 91行目: | ||
== ファイルの書き込み == | == ファイルの書き込み == | ||
==== テキストファイルの一括書き込み ==== | |||
以下の例では、テキストデータをファイルに出力している。<br> | |||
既にファイルが存在する場合は、エラーメッセージを表示して終了する。<br> | |||
<syntaxhighlight lang="c++"> | |||
void MainWindow::writeTextFile(QString FileName, QString strOutputData) | |||
{ | |||
QString strErrMsg = ""; | |||
QFileInfo FileInfo(FileName); | |||
if(FileInfo.exists()) | |||
{ | |||
strErrMsg = "既存ファイル(" + FileInfo.suffix() + ")には出力できません" | |||
QMessageBox::information(this, tr("ファイル出力エラー"), strErrMsg); | |||
return; | |||
} | |||
QFile File(FileName); | |||
if (!File.open(QIODevice::WriteOnly)) | |||
{ | |||
strErrMSg = "ファイル(" + FileInfo.suffix() + ")オープンエラー:" + File.errorString(); | |||
qDebug() << strErrMsg; | |||
return; | |||
} | |||
QTextStream OutStream(&File); | |||
OutStream << strOutputData; | |||
File.close(); | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== バイナリデータの書き込み ==== | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Qt]] | [[カテゴリ:Qt]] |
2021年1月26日 (火) 00:03時点における版
概要
ソフトウェアにおいて、ファイルの操作は非常に重要な項目である。
テキストファイルやバイナリファイル、画像ファイル等、各フォーマットにしたがって、ファイルの入出力を行う必要がある。
ファイルフォーマットは、公開・非公開のものがあり、各フォーマットを理解してファイルの入出力を行うことは難しいが、
ライブラリを使用する場合、簡単に入出力を行うことができる。
ファイルの読み込み
テキストファイルの一括読み込み
以下の例では、一括で読み込んだテキストデータを改行コードで分割して、行数分だけ回して処理している。
ファイルのオープンに失敗した場合、エラーメッセージをデバッグ出力して終了する。
#include <QTextStream>
#include <QFile>
void MainWindow::readTextFileAll(const QString &FileName)
{
QFile File(FileName);
if(!File.open(QIODevice::ReadOnly))
{
QString strErrMsg = "File(" + QFileInfo(File).fileName() + ") Open Error: " + File.errorString();
qDebug << strErrMsg;
return;
}
QTextStream InStream(&File);
QString strTextData = InStream.readAll();
File.close();
QList<QString> Lines = istrTextData.split("\n");
foreach (QString Line, Lines)
{
qDebug() << line;
break;
}
}
テキストファイルの1行読み込み
以下の例では、テキストストリームから1行ずつ読み込んで処理している。
ファイルを閉じた場合、テキストストリームが使用できなくなるため、最後にファイルを閉じる。
#include <QTextStream>
#include <QFile>
void MainWindow::readTextFileLine(const QString &FileName)
{
QFile File(FileName);
if(!File.open(QIODevice::ReadOnly))
{
QString strErrMsg = "File(" + QFileInfo(File).fileName() + ") Open Error: " + File.errorString();
qDebug() << strErrMsg;
return;
}
QTextStream InStream(&File);
while(!InStream.atEnd())
{
qDebug() << InStream.readLine();
break;
}
File.close();
}
バイナリデータの読み込み
バイナリデータを読み込む場合は、QFile
クラスのreadLine
メソッドまたはreadAll
メソッドを使用する。
QDataStreamを使用してバイナリデータを書き出す場合、以下の問題が生じる。
QDataStreamの仕様において、バイナリデータを書き込む場合、先頭にバイナリデータのサイズが追加される。
これは、QDataStreamはバイナリデータを直列化するためのものだからである。
#include <QFile>
QFile File(FileName);
if(!File.open(QIODevice::ReadOnly))
{
QString strErrMsg = "File(" + QFileInfo(File).fileName() + ") Open Error: " + File.errorString();
qDebug() << strErrMsg;
return;
}
QByteArray ByAryData = File.readAll();
File.close();
ファイルの書き込み
テキストファイルの一括書き込み
以下の例では、テキストデータをファイルに出力している。
既にファイルが存在する場合は、エラーメッセージを表示して終了する。
void MainWindow::writeTextFile(QString FileName, QString strOutputData)
{
QString strErrMsg = "";
QFileInfo FileInfo(FileName);
if(FileInfo.exists())
{
strErrMsg = "既存ファイル(" + FileInfo.suffix() + ")には出力できません"
QMessageBox::information(this, tr("ファイル出力エラー"), strErrMsg);
return;
}
QFile File(FileName);
if (!File.open(QIODevice::WriteOnly))
{
strErrMSg = "ファイル(" + FileInfo.suffix() + ")オープンエラー:" + File.errorString();
qDebug() << strErrMsg;
return;
}
QTextStream OutStream(&File);
OutStream << strOutputData;
File.close();
}
バイナリデータの書き込み