OwlCore.Storage 0.12.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package OwlCore.Storage --version 0.12.0                
NuGet\Install-Package OwlCore.Storage -Version 0.12.0                
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.12.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add OwlCore.Storage --version 0.12.0                
#r "nuget: OwlCore.Storage, 0.12.0"                
#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.12.0

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

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
OwlCore

Have you ever seen an owl do a barrel roll? Me neither. Essential supplemental tooling for .NET development.

OwlCore.Kubo

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

CoptLib

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

OwlCore.Storage.SharpCompress

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.

OwlCore.Storage.CommonTests

Package Description

GitHub repositories (3)

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

Repository Stars
yoshiask/FluentStore
A unifying frontend for Windows app stores and package managers
securefolderfs-community/SecureFolderFS
Powerful, secure, modern way to keep your files protected.
Arlodotexe/strix-music
Combine any music sources into a single library. It's your music. Play it your way.
Version Downloads Last updated
0.12.1 157 11/21/2024
0.12.0 1,021 9/7/2024
0.11.3 1,442 6/24/2024
0.11.2 120 6/20/2024
0.11.1 348 5/18/2024
0.11.0 683 4/3/2024
0.10.1 112 4/3/2024
0.10.0 1,859 3/18/2024
0.9.3 2,306 1/5/2024
0.9.2 842 11/15/2023
0.9.1 168 11/15/2023
0.9.0 270 11/14/2023
0.8.7 1,498 8/16/2023
0.8.6 743 7/10/2023
0.8.5 1,233 5/13/2023
0.8.4 251 5/7/2023
0.8.3 599 2/23/2023
0.8.2 1,951 2/22/2023
0.8.1 246 2/22/2023
0.8.0 691 2/22/2023
0.7.1 561 2/7/2023
0.7.0 458 2/1/2023
0.6.1 284 1/31/2023
0.6.0 286 1/31/2023
0.5.3 530 1/13/2023
0.5.2 669 12/25/2022
0.5.1 816 11/9/2022
0.5.0 10,068 9/6/2022
0.4.0 1,011 9/6/2022
0.3.2 398 9/5/2022
0.3.1 1,001 9/5/2022
0.3.0 389 9/2/2022
0.2.0 1,311 8/31/2022
0.1.0 386 8/30/2022
0.0.0 392 8/30/2022

--- 0.12.0 ---
[Breaking]
The Stream opened from HttpFile is no longer seekable, as the internal LazySeekStream and all usages have been removed.

[Fixes]
Fixes an issue where files larger than 2GB couldn't be fully read via HttpFile.

--- 0.11.3 ---
[Improvement]
Removed redundant validation when enumerating files and folders to improve performance in SystemFile and SystemFolder.

--- 0.11.2 ---
[Fixes]
Fixed an issue where the stream returned from `File.Open` does synchronous operations on the file and didn't support cancellation during read/write. The underlying operating system now gives us an asynchronous file stream to do true async reads/writes.
Fixed an issue where SystemFolder is not properly making use of lazy-loading for DirectoryInfo (`Info` property) when we only have the path. In some use cases having the directory info pre-loaded can be unnecessary and slows down performance especially when enumerating large folders.

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

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

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

[Improvements]
Update all dependencies to latest versions.

--- 0.10.0 ---
THIS IS A BREAKING RELEASE
Update asap, and do not use older versions or implementations.

[Breaking]
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.

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

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

--- 0.9.2 ---
[Improvements]
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.

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

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

--- 0.9.0 ---
[Breaking]
The HttpFile.HttpMessageHandler property has been removed.

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

--- 0.8.7 ---
[Improvements]
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 ---
[Fixes]
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 ---
[Fixes]
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 ---
[Fixes]
Fixed an issue where ReadOnlyZipArchiveFolder's GetFirstByName extension would fail to find folders.

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

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

--- 0.8.0 ---
THIS IS A BREAKING RELEASE
Update asap, and do not use older versions or implementations.

[Breaking]
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.

[New]
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 ---
[Fix]
Fixed an issue where providing only a Uri for HttpFile would yield an incorrect file name.

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

--- 0.6.1 ---
[Fixes]
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 ---
[New]
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.

[Improvements]
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 ---
[Fixes]
Fixed an issue in SystemFolder where deleting a folder that has children would throw instead of deleting recursively.

[Improvements]
Updated testing dependencies.

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

[Improvements]
Updated downstream NuGet packages
Wrote basic CommonTests for IModifiableFolder

--- 0.5.1 ---
[Fixes]
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 ---
THIS IS A BREAKING RELEASE
Update asap, and do not use older versions.

[Breaking]
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 ---
THIS IS A BREAKING RELEASE
Update asap, and do not use older versions.

[Breaking]
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 ---
[Fixes]
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 ---
[Fixes]
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 ---
[New]
Added MemoryFile and MemoryFolder under OwlCore.Storage.Memory.

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

[Breaking]
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.

[New]
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 ---
[New]
Added all missing interfaces and extension methods from proposal.
     
--- 0.0.0 ---
[New]
Initial release of OwlCore.Storage.