OwlCore.Storage 0.11.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package OwlCore.Storage --version 0.11.1                
NuGet\Install-Package OwlCore.Storage -Version 0.11.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OwlCore.Storage" Version="0.11.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add OwlCore.Storage --version 0.11.1                
#r "nuget: OwlCore.Storage, 0.11.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install OwlCore.Storage as a Cake Addin
#addin nuget:?package=OwlCore.Storage&version=0.11.1

// Install OwlCore.Storage as a Cake Tool
#tool nuget:?package=OwlCore.Storage&version=0.11.1                

The most flexible file system abstraction, ever. Built in partnership with the UWP Community.

     This package enables early adoption of CommunityToolkit.Storage, a proposed package in Toolkit Labs, eventually to end up in CommunityToolkit/dotnet on GitHub.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (11)

Showing the top 5 NuGet packages that depend on OwlCore.Storage:

Package Downloads

Have you ever seen an owl do a barrel roll? Me neither. Essential supplemental tooling for .NET development. Included in this package: - OwlCore.Storage: The fundamental concepts of files and folders carefully abstracted into standard interfaces. Interact with Local Disk, Cloud Storage, Blob Storage, protocol-based storage, and even 100% in-memory storage, all using the same interfaces. - OwlCore.Extensions: A collection of exceptionally useful extension methods. - OwlCore.ComponentModel: Provides classes used to implement the run-time behavior of components. SettingsBase, IDelegatable{T}, IAsyncInit, etc. - Much more not listed, much more to come. The experimental, available in separate packages: - OwlCore.Remoting: A extremely lightweight and flexible RPC framework for .NET Standard 2.0. - OwlCore.Kubo: A library of essential tooling for Kubo, the earliest and most widely used implementation of IPFS. - OwlCore.AbstractUI - A set of models with serializable states that can be templated as controls.


An essential toolkit for Kubo, IPFS and the distributed web.


A .NET Standard 2.0 library made to handle scenarios involving documents with interdependencies and multilingual content.


Package Description


Provides a generic archive implementation via SharpCompress for the OwlCore.Storage APIs. Verified support for `.7z`, `.tar`, and `.zip` archives created by 7Zip and `.zip` archives by Windows File Explorer. Reading and writing GZip archives is partially supported with the same limitations as SharpCompress.

GitHub repositories (2)

Showing the top 2 popular GitHub repositories that depend on OwlCore.Storage:

Repository Stars
A unifying frontend for Windows app stores and package managers
Combine any music sources into a single library. It's your music. Play it your way.
Version Downloads Last updated
0.11.3 145 6/24/2024
0.11.2 86 6/20/2024
0.11.1 253 5/18/2024
0.11.0 507 4/3/2024
0.10.1 82 4/3/2024
0.10.0 501 3/18/2024
0.9.3 2,174 1/5/2024
0.9.2 686 11/15/2023
0.9.1 117 11/15/2023
0.9.0 193 11/14/2023
0.8.7 1,418 8/16/2023
0.8.6 660 7/10/2023
0.8.5 1,092 5/13/2023
0.8.4 201 5/7/2023
0.8.3 541 2/23/2023
0.8.2 1,738 2/22/2023
0.8.1 210 2/22/2023
0.8.0 586 2/22/2023
0.7.1 513 2/7/2023
0.7.0 410 2/1/2023
0.6.1 244 1/31/2023
0.6.0 261 1/31/2023
0.5.3 476 1/13/2023
0.5.2 596 12/25/2022
0.5.1 775 11/9/2022
0.5.0 9,574 9/6/2022
0.4.0 952 9/6/2022
0.3.2 362 9/5/2022
0.3.1 942 9/5/2022
0.3.0 352 9/2/2022
0.2.0 1,245 8/31/2022
0.1.0 354 8/30/2022
0.0.0 358 8/30/2022

--- 0.11.1 ---
Fixed an issue where SystemFolderWatcher would not capture any file system events.

--- 0.11.0 ---
Added new FileReadExtensions and FileWriteExtensions for reading and writing IFile as text content or byte arrays.

--- 0.10.1 ---
Fixed an issue where ZipArchiveFolder.DeleteAsync wasn't handling files correctly.

Update all dependencies to latest versions.

--- 0.10.0 ---
Update asap, and do not use older versions or implementations.

All inbox implementations that rely on .NET itself have been moved to the OwlCore.Storage.System.* namespace, making room for future inbox implementations (System.Formats.Tar, System.Data.Common, System.Resources, etc).
The default FileAccess.Read parameter for IFile.OpenStreamAsync has been removed. This is primarily to avoid confusion about why the default returned stream can't be written to, but follows the concept that simply opening a stream implies nothing about read/write preferences for that resource, so no default value should be used.
Generics for the Move and Copy interfaces and methods have been removed. This fixes an issue where only the fallback path was being used unless the most derived type was specified, and generally allows for more flexible implementations.
When "overwrite" in the Move and Copy interfaces / extension methods is set to false, the operation will fail if the destination already exists. Previously if overwrite was false, any existing destination file would be returned untouched with no data copied over.

Extensions methods for IFile.OpenReadAsync, IFile.OpenWriteAsync and IFile.OpenReadWriteAsync have been added.

--- 0.9.3 ---
The DirectoryInfo for SystemFolder is now exposed as a public Info property.
General pass adding missing xmldoc comments to interfaces.

--- 0.9.2 ---
The stream returned by HttpFile.OpenStreamAsync() now includes the value of the Content-Length header as the stream Length.
The stream returned by HttpFile.OpenStreamAsync() is now wrapped in a LazySeekStream, allowing for seeking and only advancing the underlying stream when strictly needed.

Fixed an issue where ZipArchiveFolder.DeleteAsync wasn't correctly identifying the zip entry given the storage id.

--- 0.9.1 ---
HttpFile was given a new constructor accepting an HttpClient: HttpFile(string uri, HttpClient httpClient).

--- 0.9.0 ---
The HttpFile.HttpMessageHandler property has been removed.

The HttpFile.Client property was added.
A new constructor accepting an HttpClient was added to HttpFile.

--- 0.8.7 ---
In SystemFile, the Name is now evaluated on first access instead of in the constructor.
SystemFile now has constructor taking an instance of FileInfo.  

--- 0.8.6 ---
Fixed an issue where SystemFolder.GetItemAsync wasn't properly throwing a FileNotFoundException when the requested item doesn't exist. Fixes usage with CreateCopyOfAsync.
Fixed an issue where SystemFolder.CreateFolderAsync was unexpectedly throwing FileNotFoundException when overwrite: true is provided.

--- 0.8.4 ---
Removed an old implementation of CreateCopyOfAsync from SystemFolder. Existing code referencing this symbol should now point to the extension method instead. Fixes several bugs.

--- 0.8.3 ---
Fixed an issue where ReadOnlyZipArchiveFolder's GetFirstByName extension would fail to find folders.

--- 0.8.2 ---
Fixed an issue with the new CreateCopyOfAsync extension method where it was not opening existing files when overwrite is false.

--- 0.8.1 ---
Fixed an issue with the new CreateCopyOfAsync extension method where a writable stream was not requested for the destination file.

--- 0.8.0 ---
Update asap, and do not use older versions or implementations.

Path was removed from IAddressableStorable. This was not spec'd or standardized, and simply exposed the "path" used by the underlying implementation, so we removed it. Additional tooling has been added to substitute any functionality gaps that removing this has caused.
Renamed IStorageProperties{T} to IStorageProperty{T}.
Renamed IAddressableStorable to IStorableChild, as the only thing on the interface is now GetParentAsync.
Renamed IAddressableFolder to IChildFolder.
Renamed IAddressableFile to IChildFile.
Renamed IFolderCanFastGetItem to IFastGetItem.
Renamed IFolderCanFastGetFirstItemByName to IFastGetFirstByName.
Renamed the extension method GetFirstItemByNameAsync to GetFirstByNameAsync.
IModifiableFolder no longer requires implementing copy/move operations. Please remove from your implementations, and implement the fastpath interfaces where appropriate.
Refactored HttpFile constructors. Only 1 parameter is required: either a Uri or a string.
HttpFile.Name now has an init-only setter.
HttpFile.MessageHandler now has an init-only setter.
HttpFile.Id is no longer customizable, and is always created from the provided Uri instead.

Added IFastGetRoot interface.
Added IFastFileCopy{T} interface.
Added IFastFileMove{T} interface.
Added IFastGetItemRecursive interface.
Added GetRootAsync extension method.
Added ModifiableFolderExtensions.CreateCopyOfAsync{T} extension method.
Added ModifiableFolderExtensions.MoveFromAsync{T} extension method.
Added FolderExtensions.GetItemRecursiveAsync extension method.
Added FolderExtensions.GetRelativePathToAsync extension method, to generate a relative path from one item to another.
Added FolderExtensions.GetItemByRelativePathAsync extension method, to traverse a relative path from one item to another.
Added FolderExtensions.GetItemRecursiveAsync extension method, to recursively search a folder for an item with the provided ID.
SystemFolder now implements IFastGetRoot.
ZipArchiveFolder now implements IFastGetRoot.
ReadOnlyZipArchiveFolder now implements IFastGetRoot.

--- 0.7.1 ---
Fixed an issue where providing only a Uri for HttpFile would yield an incorrect file name.

--- 0.7.0 ---
Added the IFolder.GetFirstItemByNameAsync extension method and the IFolderCanFastGetFirstItemByName interface. Contributed by @yoshiask@github.com.

--- 0.6.1 ---
Removed leading separator in ZIP archive IDs. Contributed by @yoshiask@github.com.
Fixed ReadOnlyZipArchiveFolder not recognizing existing virtual folders. Contributed by @yoshiask@github.com.

--- 0.6.0 ---
Added OwlCore.Storage.StreamFile, a file implementation that presents a provided stream as file content.
Added OwlCore.Storage.HttpFile, a file implementation which calls GET on a provided HTTP URL and returns it as file content.
Added OwlCore.Storage.Archive namespace, and new implementations for reading and writing a Zip archive from a file. Contributed by @yoshiask@github.com.

Added new constructor to MemoryFile that requires only a MemoryStream, no Id or Name. These are calculated from the stream's hash code instead.

--- 0.5.3 ---
Fixed an issue in SystemFolder where deleting a folder that has children would throw instead of deleting recursively.

Updated testing dependencies.

--- 0.5.2 ---
Fixed several bugs in MemoryFolder and SystemFolder regarding overwrite behavior.

Updated downstream NuGet packages
Wrote basic CommonTests for IModifiableFolder

--- 0.5.1 ---
Fixed an issue in MemoryFolder and SystemFolder where calling CreateFileAsync and CreateFolderAsync with overwrite set to false wouldn't return an existing storable.

--- 0.5.0 ---
Update asap, and do not use older versions.

Items in a folder always have a parent, so they're always addressable. We've updated the interfaces and inbox implementations to reflect this.

IFolder.GetItemsAsync() now returns IAddressableStorable instead of IStorable.
IModifiableFolder.CreateCopyOfAsync now returns IAddressableFile instead of IFile.
IModifiableFolder.MoveFromAsync now returns IAddressableFile instead of IFile.
IModifiableFolder.MoveFromAsync now takes IAddressableFile instead of IFile as the first parameter.
IModifiableFolder.CreateFileAsync now returns IAddressableFile instead of IFile.
IModifiableFolder.CreateFolderAsync now returns IAddressableFolder instead of IFolder.
IModifiableFolder.DeleteAsync now takes IAddressableStorable instead of IStorable as the first parameter.

--- 0.4.0 ---
Update asap, and do not use older versions.

IAddressableStorable.GetParentAsync() now returns IFolder? instead of IAddressableFolder?. Any type of folder could yield an IAddressableStorable, so we've made sure the parent of any IAddressableStorable can be any type of folder.

To migrate, simply change the return type of IAddressableStorable.GetParentAsync() to IFolder? in your implementations. No other changes are required.

--- 0.3.2 ---
Fixed SystemFolder not extracting the folder name from the path correctly.
Fixed SystemFile.OpenStreamAsync failing when call on a file returned from System.CreateFileAsync
Fixed an issue with SystemFileWatcher where it couldn't reliably determine if an arbitrary path is a File or a Folder.

--- 0.3.1 ---
Fixed a crash that may occur when calling SystemFolder.CreateCopyOfAsync, when the stream of the file being copied doesn't support seeking.

--- 0.3.0 ---
Added MemoryFile and MemoryFolder under OwlCore.Storage.Memory.

--- 0.2.0 ---
Update asap, and do not use older versions.
We will switch to pure semver2.0 once a stable 1.0.0 released is made.

Due to the wildly different strategies that could be used for generic recursive folder moving/copying, IModifiableFolder.CreateCopyOfAsync and IModifiableFolder.MoveFromAsync now exclusively handle files. This may be added back later as a fast-path interface + extension method.

A new property has been added to the IFolderWatcher interface. Supplying the folder which is being observed is now a requirement. The "sender" in the INotifyCollectionChanged handler should be the watcher instead of the folder, meaning the folder can't be accessed from event handlers unless the watcher supplies it.

OwlCore.Storage.SimpleStorableItem has been added, a minimum possible implementation of IStorable. This is useful in scenarios when you need to identify a resource but shouldn't supply any access to it, such as when a file or folder is removed.

We've started adding inbox interface implementations, starting with System.IO, under the namespace OwlCore.Storage.SystemIO.

--- 0.1.0 ---
Added all missing interfaces and extension methods from proposal.
--- 0.0.0 ---
Initial release of OwlCore.Storage.