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);