うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【C#】System.IO 操作系処理 (Path, Directory, StreamReader) + AssetDatabase

System.IO.Path

var basePath = "/Users/hatch/git/Unity/Blog/Assets/Script/SampleMonoBehaviour.cs";
 
// 環境毎のファイルパスの区切りに変換
var path = basePath.Replace('/', System.IO.Path.DirectorySeparatorChar);
 
// ファイル名
System.IO.Path.GetFileName(path); // SampleMonoBehaviour.cs
 
// ファイル名拡張子無し
System.IO.Path.GetFileNameWithoutExtension(path); // SampleMonoBehaviour
 
// ファイルの拡張子
System.IO.Path.GetExtension(path); // cs
 
// 親ディレクトリのパス
System.IO.Path.GetDirectoryName(path); // /Users/hatch/git/Unity/Blog/Assets/Script/
System.IO.Directory.GetParent(path);
 
// パスを環境毎のパス区切りで結合
System.IO.Path.Combine("Users", "hatch", "git"); // Users/hatch/git

System.IO.Directory

/System.IO.Path.DirectorySeparatorChar に変換してからチェックすべき

// ディレクトリが存在するか
System.IO.Directory.Exists("/Users/hatch/git/Unity/Blog/Assets");
 
// ディレクトリを作成
System.IO.Directory.CreateDirectory("/Users/hatch/git/Unity/Blog/Assets/Temp");
 
// ディレクトリ以下の*.csファイル一覧を取得
var findFiles = System.IO.Directory.GetFiles("/Users/hatch/git/Unity/Blog/Assets/Script/", "*.cs");
 
// ディレクトリ以下の子ディレクトリを含めて *.csファイル一覧を取得
var findFiles2 = System.IO.Directory.GetFiles("/Users/hatch/git/Unity/Blog/Assets/Script/", "*.cs", System.IO.SearchOption.AllDirectories);
 
// ディレクトリ以下にある子ディレクトリ一覧を取得
var findDirs = System.IO.Directory.GetDirectories("/Users/hatch/git/Unity/Blog/Assets");

System.IO.StreamReader

// ファイルを1行ずつ読み込み
// encode を指定することもできる System.Text.Encoding.GetEncoding("utf-8");
using (var reader = new System.IO.StreamReader(basePath))
{
    while (!reader.EndOfStream)
    {
        var line = reader.ReadLine();
    }
}

AssetDatabase

System.IO.File は AssetDatabase のほうがいいので、基本的にはこちらを利用する

AssetDataBase は "Assets/" から始まるパスしか受け付けず
また、パスの区切りは環境に関係無く '/' を利用する

ファイル・ディレクトリまわりの処理のみを記述しており
まだまだできることが多いので、調べておくと便利

var basePath = "/Users/hatch/git/Unity/Blog/Assets/Script/SampleMonoBehaviour.cs";
 
// System.IO で利用したパスを AssetDatabase で利用できるパスに変換
var assetRoot = basePath.Replace(Application.dataPath, "Assets"); // Assets/Script/SampleMonoBehaviour.cs
 
// ディレクトリが存在するか
AssetDatabase.IsValidFolder("Assets/");
 
// ディレクトリ作成
AssetDatabase.CreateFolder("Assets/", "Temp");
 
// 作成したアセットを保存
var asset = ScriptableObject.CreateInstance<ScriptableObject>();
AssetDatabase.CreateAsset(asset, "Assets/sample.asset");
 
// 更新が出たアセットを反映
EditorUtility.SetDirty(asset);
 
// 新規作成したアセットを反映
AssetDatabase.SaveAssets();
 
// 変更があったアセットのimportを走らせる
AssetDatabase.Refresh();
 
// アセットのパスを取得
var path = AssetDatabase.GetAssetPath(asset);
 
// アセットを削除
AssetDatabase.DeleteAsset(path);