コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】IOException: Directory Library/BuildCache\XXXX is not empty

概要

IOException: Directory Library/BuildCache\XXXX is not empty

Addressable Asset System を使用しているプロジェクトで
BuildCache.PurgeCache( false ); を実行したところ
上記の例外が発生することがあった

一度、手動で Library/BuildCache フォルダを削除したらそれ以降は発生しなくなったが
再発するようであれば下記のようなコードを作る必要があるかも

public static void DeleteDirectory( string path )
{
    if ( !Directory.Exists( path ) ) return;

    foreach ( var file in Directory.EnumerateFiles( path ) )
    {
        File.SetAttributes( file, FileAttributes.Normal );
        File.Delete( file );
    }

    foreach ( var dir in Directory.EnumerateDirectories( path ) )
    {
        DeleteDirectory( dir );
    }

    try
    {
        Directory.Delete( path, false );
    }
    // IOException が発生した場合は
    // もう一度 Directory.Delete を実行すると
    // ちゃんと削除できることがあった
    catch ( IOException )
    {
        if ( Directory.Exists( path ) )
        {
            Directory.Delete( path, false );
        }
    }
}