public static async Task <IStorageFolder> CreateFolderAsync( this IStorageProvider storageProvider, IStoragePath path, bool recursive = false, IProgress progress = null, CancellationToken cancellationToken = default(CancellationToken)) { if (storageProvider == null) { throw new ArgumentNullException(nameof(storageProvider)); } if (path == null) { throw new ArgumentNullException(nameof(path)); } if (storageProvider.Features.TryGetFeature(out ICreateByPathFeature implmentation)) { return(await implmentation.CreateFolderAsync(storageProvider, path, recursive, progress, cancellationToken)); } // Default implementation. var p = await path.GetParentAsync(cancellationToken); switch (p) { case null: throw new InvalidOperationException($"Unable to resolve parent of {path.Uri}."); case IStorageFolder folder: return(await folder.CreateFolderAsync(path.Name, progress, cancellationToken)); case IStorageRecord _: throw new InvalidOperationException($"Parent of {path.Uri} is a storage record."); case IStoragePath parentPath: if (recursive) { var folder = await storageProvider.CreateFolderAsync(parentPath, true, progress, cancellationToken); return(await folder.CreateFolderAsync(path.Name, progress, cancellationToken)); } throw new InvalidOperationException($"Parent of {path.Uri} does not exist."); default: throw new NotImplementedException($"No implementation provided that handles {p.GetType()}"); } }
public static IStoragePath GetParent(this IStoragePath path) { return(path.GetParentAsync().GetAwaiter().GetResult()); }