OwlCore.Storage
0.12.1
dotnet add package OwlCore.Storage --version 0.12.1
NuGet\Install-Package OwlCore.Storage -Version 0.12.1
<PackageReference Include="OwlCore.Storage" Version="0.12.1" />
paket add OwlCore.Storage --version 0.12.1
#r "nuget: OwlCore.Storage, 0.12.1"
// Install OwlCore.Storage as a Cake Addin #addin nuget:?package=OwlCore.Storage&version=0.12.1 // Install OwlCore.Storage as a Cake Tool #tool nuget:?package=OwlCore.Storage&version=0.12.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 | Versions 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. |
-
.NETStandard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 8.0.0)
- System.Linq.Async (>= 6.0.1)
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 | 104 | 11/21/2024 |
0.12.0 | 949 | 9/7/2024 |
0.11.3 | 1,428 | 6/24/2024 |
0.11.2 | 112 | 6/20/2024 |
0.11.1 | 336 | 5/18/2024 |
0.11.0 | 672 | 4/3/2024 |
0.10.1 | 107 | 4/3/2024 |
0.10.0 | 1,821 | 3/18/2024 |
0.9.3 | 2,301 | 1/5/2024 |
0.9.2 | 837 | 11/15/2023 |
0.9.1 | 163 | 11/15/2023 |
0.9.0 | 261 | 11/14/2023 |
0.8.7 | 1,493 | 8/16/2023 |
0.8.6 | 732 | 7/10/2023 |
0.8.5 | 1,228 | 5/13/2023 |
0.8.4 | 246 | 5/7/2023 |
0.8.3 | 594 | 2/23/2023 |
0.8.2 | 1,942 | 2/22/2023 |
0.8.1 | 241 | 2/22/2023 |
0.8.0 | 686 | 2/22/2023 |
0.7.1 | 556 | 2/7/2023 |
0.7.0 | 453 | 2/1/2023 |
0.6.1 | 279 | 1/31/2023 |
0.6.0 | 281 | 1/31/2023 |
0.5.3 | 523 | 1/13/2023 |
0.5.2 | 664 | 12/25/2022 |
0.5.1 | 811 | 11/9/2022 |
0.5.0 | 10,063 | 9/6/2022 |
0.4.0 | 1,006 | 9/6/2022 |
0.3.2 | 393 | 9/5/2022 |
0.3.1 | 996 | 9/5/2022 |
0.3.0 | 384 | 9/2/2022 |
0.2.0 | 1,306 | 8/31/2022 |
0.1.0 | 381 | 8/30/2022 |
0.0.0 | 387 | 8/30/2022 |
--- 0.12.1 ---
[Improvements]
Added the `virtual` keyword to all methods in `SystemFile` and `SystemFolder`, allowing consumers to extend these or adjust these methods in a custom derived implementation. 8d176f915ba2adb525f6aae4e40fa3f06944f0b9
SystemFile.FileShare and SystemFile.BufferSize properties for `FileStream` constructor parameters that were previously hardcoded. fe2205fe308df185411243b1c77bffa09e876f76
--- 0.12.0 ---
[Breaking]
The Stream opened from HttpFile is no longer seekable, as the internal LazySeekStream and all usages have been removed.
[Fixes]
Fixed an issue where CreateCopyOfAsync and MoveFromAsync slowpaths would throw when given a stream that couldn't set length.
Fixes an issue where files larger than 2GB couldn't be fully read via HttpFile.
Fixed inconsistent behavior when calling CreateCopyOfAsync from interface instead of extension method. The overwrite: false throw check now happens inside of CreateCopyOfFallbackAsync.
Fix inconsistent CreateCopyOfAsync behavior in SystemFolder when a file exist and overwrite: false is given.
Fixed an issue where calling MemoryFile.OpenStreamAsync wouldn't return a stream with a 0 position, and would keep position the same even after outer disposal by other callers.
--- 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.