PSO2公式 RSS
    --------(--)

    スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。
    2015-07-26(Sun)

    FileStreamを使ってファイルを読み込む時のエラーとか

    どうも、こんにちはsaltです。

    今日は、私が趣味でやっているプログラミングで気になったことを書いておこうかな。

    このブログでプログラミング関係を書くのは初めてですが、今後増えていくかも。
    結構時間たった後に自分で書いたソースとか見直すと分からなくなることって多々あるから、
    自分用のメモ的な感じで書こうと思います。


    今回は~Unity でのファイル読み込みでのエラー 
    IsolatedStorageException についてです。
    (言語はC#です。

    分かる人はすぐに気づけるんですが、実はこれ、
    よくある IOException に引っかからないことがあるようです。

    私の場合、なぜかunity上でテストするときは正しく機能するのに、
    実行形式(exe) に Build してそれを実行すると、Exceptionに引っかからなくてちょっと気になりましたね。

    さて、そのときの実際のコードは

    bool ReadFile(string path, ref byte[] values){
    try{
    FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
    BinaryReader bin = new BinaryReader(fileStream);
    values = bin.ReadBytes((int)bin.BaseStream.Length);
    bin.Close();
    }
    catch(IOException e){
    print ("ReadFile Error!!");
    return false;
    }
    return true;
    }


    んで、
    これをexeで実行して output_log.txt 見ると・・・

    System.IO.IsolatedStorage.IsolatedStorageException: Could not find a part of the path "C:\Users\***\***\test.jpg".

    at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) [0x00000] in :0

    at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean isAsync, Boolean anonymous) [0x00000] in :0

    at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access) [0x00000] in :0

    at ReadFile (System.String path, System.Byte[]& values) [0x00000] in :0

    とか出るわけですね。
    test.jpgが見つからないというエラーのようです。
    察しがいい人なら分かると思うんですが、
    IOException が投げられて、正しくキャッチできたときは、「ReadFile Error!!」 が表示されるはずなんですよね。
    つまり、今回のエラーはIOException ではないということらしい。
    まあ堂々と、System.IO.IsolatedStorage.IsolatedStorageException って書いてありますが・・・
    (IOって出てるのにIOではないのか・・・

    んで、どこを直せばいいかというと、

    using System.IO.IsolatedStorage;   // IsolatedStorageExceptionを使うので、なければ追加

    bool ReadFile(string path, ref byte[] values){
    try{
    FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
    BinaryReader bin = new BinaryReader(fileStream);
    values = bin.ReadBytes((int)bin.BaseStream.Length);
    bin.Close();
    }
    // このcatchを追加
    catch(IsolatedStorageException e){
    print ("ReadFile was not found!!");
    return false;
    }
    catch(IOException e){
    print ("ReadFile Error!!");
    return false;
    }
    return true;
    }


    こうすると・・・
    ReadFile was not found!! の表示が正しく出ますね!!
    今回の原因は、IsolatedStorageExceptionでしたが、 (詳しくはこちら
    Exception がらみは結構こういうのありますよね。
    なかなか面倒ではありますが、
    try/catch 文はしっかり書いておかないと動作がおかしくなる可能性が・・・(コワイ

    以上、ちょっと気になったエラーキャッチ方法でした。
    では、また次回~ノシ
    スポンサーサイト

    コメントの投稿

    管理者にだけ表示を許可する

    コメント

    プロフィール

    Author:salt
    saltの自由なブログへようこそ!
    週一ぐらい?で更新してます。

    ・好きなこと
       ゲーム
       アニメ鑑賞(ゼロ魔とか

    ・好きなゲーム
       太鼓の達人
       ドラゴンクエスト(Ⅹ以外は好き
       イース
       軌跡シリーズ
       etc...


    PSO2もやってます。プレイヤー名はSALT40(SALT400)です。
    シップは8です。
    よかったらフレ登録してね。

    PSO2関連のコメントあればうれしいです。
    PSN:saltp40

    カテゴリ
    最新記事
    最新コメント
    月別アーカイブ
    検索フォーム
    リンク
    スポンサーサイト
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。