この記事でのバージョン
Unity 2017.2.0f3
はじめに
今回はファイルのサイズをプログラムから取得する方法です!
なお、Unityでの用途は基本的にエディタ拡張だと思います。
FileInfo
C#でファイルサイズを取得するにはFileInfoのLengthを参照します。
なお、FileInfoを使うには using System.IO; が必要です。
ファイルサイズを取得する - .NET Tips (VB.NET,C#...)
実際に使ってみると以下のような感じ。
//Assetsから拡張子付きでパスを指定し、FileInfoを作成 FileInfo fileInfo = new FileInfo("Assets/Texture/Corgi.png"); //FileInfoのLengthがファイルサイズ(単位はバイト) Debug.Log(fileInfo.Length);
なおFileInfoは取得時の情報をキャッシュするので、
ファイルに変更があった場合はRefreshを実行しましょう。
//Assetsから拡張子付きでパスを指定し、FileInfoを作成 FileInfo fileInfo = new FileInfo("Assets/Texture/Corgi.png"); /*Assets/Texture/Corgi.pngになんらかの変更があった*/ //情報を最新にする fileInfo.Refresh(); //FileInfoのLengthがファイルサイズ(単位はバイト) Debug.Log(fileInfo.Length);
GetAssetPath
ファイルのパスがあらかじめ分かっていれば良いのですが、
プログラムでファイルのパスを取得したいという場合もあります。
そんな時は、AssetDatabase.GetAssetPathを使います。
なお、AssetDatabaseを使うには using UnityEditor; が必要です。
実際に使ってみると以下のような感じ。
//ResourcesのPlayerというPrefabを取得 GameObject player = Resources.Load<GameObject>("Player"); //prefabのパス(Assetsから拡張子付き)を取得 string playerPath = AssetDatabase.GetAssetPath(player); Debug.Log(playerPath); //パスを指定し、FileInfoを作成 FileInfo fileInfo = new FileInfo(playerPath); //FileInfoのLengthがファイルサイズ(単位はバイト) Debug.Log(fileInfo.Length);
当たり前ですが実体のないファイル(Hierarchy上にしかないファイルとか)のパスは取得出来ません。