MGL::File::Exception#

概要#

MGL::File::ExceptionはMGL::File名前空間以下の機能が送出する例外クラスです。このクラスはstd::exceptionを継承し、MGL::File::Errorを内包するよう拡張されています。

この例外を送出する可能性のあるクラスは次の通りです。

宣言#

namespace MGL::File
{
    class Exception : public std::exception;
}

利用例#

try
{
    MGL::File::ThrowingUtility utility;

    // ThrowingUtilityを用いて $path/to/target というファイルを削除
    utility.Remove("$path/to/target");
}
catch (const MGL::File::Exception &fileException)
{
    // 例外を補足したらその理由をエラーログとして表示
    MGL_ERROR(fileException.what());
}
実行結果
[MGL::File::Exception] code: 202, Failed to remove file: $path/to/target

注釈

202は指定のマウント名が見つからない場合のエラーコードです。この場合、pathという名前でマウントされていないため対象ファイルを削除できなかった事を表しています。

メンバ情報#

種類

名前

内容

バージョン

関数

コンストラクタ

1.1.16+

関数

GetError

エラーの種類を取得

1.1.16+


コンストラクタ#

宣言#

namespace MGL::File
{
    class Exception : public std::exception
    {
    public:
        Exception(Error error, const char *what) noexcept;
    };
}

引数#

MGL::File::Error error

エラーの種類

const char * what

例外の送出理由を表す文字列

説明#

注釈

MGLのファイルアクセスの仕組み上、この例外をユーザー側から送出する機会はありません。したがって、このコンストラクタをユーザー側が呼び出す必要も通常はありません。

例外を送出するためのコンストラクタです。

引数errorには失敗理由を表すエラーコードを指定します。この引数には通常、処理に失敗したファイルアクセス関連の関数の戻り値をそのまま指定します。

whatは例外の理由を表す任意の文字列を指定します。ここで指定した理由はエラーコードを含むメッセージへと変換され、std::exception::what()による取得結果に反映されます。

利用例#

try
{
    // fopen() でファイルをオープンし、失敗時の理由を例外として送出する例
    // Note:
    //  MGLアプリケーションがこのような処理を記述することは通常はありません。
    const auto *fp = fopen("path/to/file", "r");
    if (fp == nullptr)
    {
        switch (errno)
        {
            case ENOENT:
                throw MGL::File::Exception(
                    MGL::File::Error::FileNotExist,
                    "ファイルが見つかりません。");

            case EPERM:
                throw MGL::File::Exception(
                    MGL::File::Error::NotPermitted,
                    "ファイルへのアクセス権がありません。");

            ...
        }
    }

    fclose(fp);
}
// 例外を補足して標準エラー出力に理由を出力
catch (const MGL::File::Exception &fileException)
{
    fputs(fileException.what(), stderr);
}
実行結果
[MGL::File::Exception] code: 300, ファイルが見つかりません。

バージョン情報#

MGL 1.1.16
  • 初回リリース

関連#


GetError#

エラーの種類を取得

宣言#

namespace MGL::File
{
    class Exception : public std::exception
    {
    public:
        [[nodiscard]] constexpr Error GetError() const noexcept;
    };
}

戻り値#

MGL::File::Error

エラーの種類

説明#

例外の送出理由となったエラーの種類を取得します。

エラーの種類によって処理を分岐させたい場合に使用してください。なお、std::exception::what()から取得可能なメッセージには、MGL::File::Errorに対応したエラーコードが既に含まれているため、ログの出力目的でこの関数を用いる必要はありません。

利用例#

try
{
    MGL::File::ThrowingUtility utility;

    // ThrowingUtilityを用いて $path/to/target というファイルを削除
    utility.Remove("$path/to/target");
}
catch (const MGL::File::Exception &fileException)
{
    // エラーの内容に応じて分岐
    switch (fileException.GetError())
    {
        // ファイルが見つからなかった場合の処理
        case MGL::File::Error::FileNotExist:
            ...
            break;

        // マウント名が見つからなかった場合の処理
        case MGL::File::Error::NotMounted:
            ...
            break;

        ...
    }
}

バージョン情報#

MGL 1.1.16
  • 初回リリース

関連#