2023年 9月 の投稿一覧

メモ:PCを使ってて困ったとき

Edge

矢印キーの動作がおかしい

カーソルブラウズ(キャレットブラウズ)モードの有効/無効が変更されている可能性がある。
無効のときは、矢印キーはスクロール操作となる。

カーソルブラウズの有効/無効は「F7キー」で切り替えられる。

Visio Standard

サイズの自動設定

デザインタブ→サイズの自動設定 クリックでオン/オフを切り替え

QFile

環境

Raspberry Pi 3B+

$ uname -a    // Linux 5.10.103-v7+
$ cat /etc/os-release        // Raspbian GNU/Linux 10 (buster)
$ cat /etc/debian_version    // 10.13

Qt Creator 4.8.2
Qt 5.11.3 (GCC 8.3.0, 32bit)

QFileクラス

テキストファイル、バイナリーファイル、リソースの読み取り・書き込み用クラス。

QFileのみで読み取り・書き取り動作を実装できる。
QTextStream, QDataStreamを併せることでより便利な活用ができる。
ファイルシステム関連の高度な操作が必要な場合は、QFileInfo, QDirを利用する。

継承親子関係:QObject > QIODevice > QFileDevice > QFile

QFile Class | Qt Core 5.15.15

基本的な機能

ファイルの指定

QFile file("/dir/test.txt");
QFile file;
file.setFileName("/dir/test.txt");
QFile file;
QDir::setCurrent("/dir");
file.setFileName("test.txt");

ファイルパス内の区切り文字は、OSに関わらず”/”を使用する。バックスラッシュ等は使用不可。

file.fileName();    // 設定されているファイル名を返す(QString型)

ファイルの存在確認

QFile file("test.txt");
file.exists(); // ファイルが存在する場合true, 存在しない場合false を返す

ファイルを開く

file.open();    // 成功した場合はtrue、失敗した場合はfalseを返す

QIODeviceクラスのオープンモードフラグを利用しファイルを開くモードを指定する必要がある。

オープンモードフラグは、ReadOnly, WriteOnly, ReadWriteのいずれかを必ず設定する。
オプションでその他のフラグを追加することができる。

必要な読み出し・書き込みが完了したら必ずclose()でファイルを閉じる。

openMode

  • ReadOnly 読み取り可能
  • WriteOnly 書き込み可能/ファイルが存在しない場合、作成してから開く
    ReadWrite, Append, NewOnlyのいずれかと組み合わせなければTruncate扱い(全上書き)となる
  • ReadWrite 読み書き可能/ファイルが存在しない場合、作成してから開く
  • Append ファイルの末尾に書き込み
  • Truncate 上書き(元ファイルを破棄して実行みたいな感じ)
  • Text 行末の改行コードに関係がある?っぽい
    Write時は利用端末に合わせた改行、Read時は\nとなる
    テキストファイルならつけておいたほうがよさそう
  • NewOnly ファイルが存在する場合は失敗/ファイルが存在しない場合は作成してから開く
  • ExistingOnly ファイルが存在する場合は開く/ファイルが存在しない場合は失敗するため、自動でファイルを作成しない/WriteOnly, ReadWriteと組み合わせて使用する

QIODevice Class | Qt Core 5.15.15

ファイルを閉じる

file.close();

ファイルクローズの明確な効果・必要性は、まだ調べ切れていない。
(クローズシグナル発信、デバイスクローズ、オープンモード設定解除、エラー文字列のリセットなどをしているようです。もう少し深堀して理解したいところ…)

ファイルを閉じないということは「読み取り・書き込みができる状態のまま」ということ。場合によってはバグや悪意のある攻撃の対象になるかもしれない。

とりあえず、open→処理→closeというセットで使用するのが吉。

使用例

編集中