C#でテンポラリファイルのストリームを取得する。TempStreamFactory

コンピュータ

MemoryStreamが2GBまでとのことですので、2GBを超える予定の場合テンポラリファイルのファイルストリームが返る、メソッドを作成してみました。

public static class TempStreamFactory
{
    /// <summary>
    /// 予定サイズに応じて、MemoryStream または FileStream(DeleteOnClose)を返す。
    /// </summary>
    public static Stream Create(long expectedSize)
    {
        if (expectedSize <= int.MaxValue)
        {
            return new MemoryStream((int)expectedSize);
        }
        else
        {
            string tempPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            return new FileStream(
                tempPath,
                FileMode.CreateNew,
                FileAccess.Write,
                FileShare.None,
                bufferSize: 81920,
                options: FileOptions.DeleteOnClose
            );
        }
    }
}

巨大なデータを扱う可能性がある場合、こちらのメソッドを使えばMemoryStreamとFileStreamを自動的に切り替えます。
予めサイズを知る必要がありますが。

コメント