(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

プログラムでファイルサイズを取得する【Unity】【C#】


このエントリーをはてなブックマークに追加


この記事でのバージョン
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);

f:id:kan_kikuchi:20180119131412j:plain


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

f:id:kan_kikuchi:20180119132357j:plain


当たり前ですが実体のないファイル(Hierarchy上にしかないファイルとか)のパスは取得出来ません。