Jak “vykutat” Stream ze StorageFile v UWP

Přístup k souborovému systému v UWP je z důvodu bezpečnosti omezený. Ani s deklarovanou broadFileSystemAccess capability nemohou obecně API mimo Windows.Storage přistupovat k souborům přes jejich cestu. Naštěstí většina knihoven nabízí přetížené varianty metod s parametrem System.IO.Stream, pomocí kterých se lze problému snadno vyhnout. Ale jak dostat Stream z našeho StorageFile? To stále úspěšně zapomínám, takže doufám, že mi to tento článek pomůže zapamatovat 😀 .

Konverzní metody přímo na StorageFile nenajdeme. Jsou však dostupné jako extension metody v typu WindowsRuntimeStorageExtensions, který najdeme v namespace System.IO. Nejprve tedy musíme do našeho C# souboru přidat direktivu using:

https://gist.github.com/MartinZikmund/656f610d837f90aee0bf4d94531aaa66

A teď už můžeme volat metodu OpenStreamForReadAsync na našem StorageFile, abychom dostali Stream pro čtení:

https://gist.github.com/MartinZikmund/91811ded152dc22b20fb8f818785e787

Nebo volat metodu OpenStreamForWriteAsync abychom dostali Stream pro zápis:

https://gist.github.com/MartinZikmund/85972a73ef49e904b5b6991379722f21

Dokonce existují přetížené verze metod, které vrací Stream pro soubor uvnitř konkrétní složky, pomocí instance StorageFolder:

https://gist.github.com/MartinZikmund/77d00d415f4fda85b3ec6c8f8fedaff9

Nakonec, pokud chceme jít o úroveň níže, můžeme zavolat metodu CreateSafeFileHandle, která vrací Microsoft.Win32.SafeHandles.SafeFileHandle. Ten můžeme použít například s FileStream API:

https://gist.github.com/MartinZikmund/5f22de3a3a72c901bb7fd5b4e37493ce

Windows Logo

Buy me a coffeeBuy me a coffee

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.