Jak "vykutat" Stream ze StorageFile v UWP

WinUI

4 years ago

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 :-D . 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:

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

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

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

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:

Windows Logo