public static async Task <Stream> ReadPathAsync(this IDirectory dir, string relativePath, CancellationToken ct = default) { var lastSlashPos = relativePath.LastIndexOf('/'); if (lastSlashPos < 0) { return(await dir.ReadAsync(relativePath, ct).ConfigureAwait(dir.TaskHelper)); } var filename = relativePath.Substring(lastSlashPos + 1); var path = relativePath.Substring(0, lastSlashPos); var fileDir = await dir.CdAsync(path, ct).ConfigureAwait(dir.TaskHelper); if (fileDir == null) { return(null); } return(await fileDir.ReadAsync(filename, ct).ConfigureAwait(dir.TaskHelper)); }