はかせのラボ

私の頭の中を書いていく雑記ブログです

Unity フォルダやファイルの有無を確認し無ければ生成する

あいさつ

どうも、はかせです。
ツールとか作ってるとファイルがちゃんとあるかとかが気になってきます。
そこで今回はUnityでのフォルダやファイルの確認&生成の話です。

有無を確認する

まずはusingです。

using System.IO;

ファイルとかフォルダなどのI/O処理を行う際は
こいつをusingしなければ話が始まりません。

フォルダにしてもファイルにしても確認の仕方は
ほとんど同じです。

System.IO.Directory.Exists("フォルダのパス")
System.IO.File.Exists("ファイルのパス")

これらの戻り値がtrueならば存在しており、
falseならば存在していません。

フォルダやファイルを生成してみる

usingは同じなので割愛します。
生成はそれぞれのCreateメソッドにパスを渡して実行します。

System.IO.Directory.CreateDirectory("フォルダのパス")
System.IO.File.Create("ファイルのパス")

ファイルの有無を確認して生成する

以前作ったCSV読み込み機能を改造してみました。
詳細は下記の記事をご覧ください。
hakase0274.hatenablog.com

 //ファイル名を指定して使うパターン
public static IEnumerable<T> CSVLoad<T>(string inLoadDataFile) where T : ICSVParse, new()
{
    //ファイルパスを構築
    var pass = mResourcesPass + "/" + inLoadDataFile;
    //ディレクトリがあるか
    if (System.IO.Directory.Exists(mResourcesPass))
    {
        //指定したパスのファイルがないか
        if (!System.IO.File.Exists(mResourcesPass + inLoadDataFile))
        {
            //ファイル作成
            System.IO.File.Create(pass);
            return new List<T> { new T() }.AsEnumerable<T>();
        }
    }
    else
    {
        //ディレクトリ作成
        System.IO.Directory.CreateDirectory(mResourcesPass);
        //ファイル作成
        System.IO.File.Create(pass);
        return new List<T> { new T() }.AsEnumerable<T>();
    }
    IEnumerable<T> ts;
    using (var dataText = new StreamReader(pass))
    {
         ts = Load<T>(dataText.ReadToEnd());
    }
    return ts;
}

処理の流れはこんな感じです。
f:id:hakase0274:20190727221553p:plain

あとがき

今回はUnityC#でのフォルダやファイルの有無の確認と生成でした。
フォルダ操作はできるとツール作成の幅が広がるので
やってみることを勧めます。

それでは今回はこの辺でノシ