public async Task <Stream> OpenReadAsync(CancellationToken ct) { Stream stream = null; System.Security.Cryptography.Aes aes = null; ICryptoTransform decryptor = null; try { stream = await _fileInfo.OpenReadAsync(ct); var header = await AesHeader.ReadAsync(stream, ct); aes = CreateAes(header.Version); var key = FileSystem.ComputeKey(header.IV, header.Version); decryptor = CreateTransform(aes, key, header.IV, AesMode.Decrypt); // disposed by CryptoStream return(new CryptoStream(stream, decryptor, CryptoStreamMode.Read)); } catch { decryptor?.Dispose(); stream?.Dispose(); throw; } finally { aes?.Dispose(); } }
public static async Task <byte[]> GetContentBytesAsync(this IFileInfo fi, CancellationToken ct) { if (fi == null) { throw new ArgumentNullException(nameof(fi)); } using var stream = await fi.OpenReadAsync(ct); using var ms = new MemoryStream(); await stream.CopyToAsync(ms, 81920, ct); return(ms.ToArray()); }
public static async Task <IFileInfo> CopyFileAsync(this IDirectoryInfo directory, IFileInfo file, string fileName, CancellationToken ct) { if (directory == null) { throw new ArgumentNullException(nameof(directory)); } if (file == null) { throw new ArgumentNullException(nameof(file)); } using var inputStream = await file.OpenReadAsync(ct).ConfigureAwait(false); return(await directory.CreateFileAsync(fileName, inputStream, file.Length, ct).ConfigureAwait(false)); }