Beispiel Anwendung UWP mit freiem Dateizugriff via Capability broadFileSystemAccess
Im Mai 2018 hat Microsoft die Entwicklungsplattform UWP Universal Windows Platform endlich sinnvoll erweitert.
Ab der Version ist 1803 kann mit den Einstellungen BroadFileSystemAccess auf die Dateien des aktuellen Users zugegriffen werden.
Das heiĆt, die Anwendung kann ohne zusƤtzliche User-Interaction einfach auf Dateien im C Pfad oder Datenpfad zugreifen.
Bisher musste hierzu immer ein manueller Datei-Dialog oder Folder-Dialog zur Freigabe geƶffnet werden.
Beispiel Anwendung:
Kopieren einer Datei nach freier Verzeichnis und Pfad-Angabe
Mainpage.xaml
In diesem Beispiel enthƤlt die Standardseite einfach einen Button und zwei beliebige Textfelder mit dem Pfad einer Datei
Mainpage.xaml
<Page x:Class="test_file_open.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:test_file_open" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid> <Button x:Name="btnCopy" Content="Copy" HorizontalAlignment="Left" Height="99" Margin="94,140,0,0" VerticalAlignment="Top" Width="257" Click="btnCopy_Click"/> <TextBox x:Name="tbxFolder" HorizontalAlignment="Left" Height="84" Margin="88,276,0,0" Text="C:\_Daten\_temp\UWP_unknown" VerticalAlignment="Top" Width="603" FontSize="22"/> <TextBox x:Name="tbxFile" HorizontalAlignment="Left" Height="84" Margin="91,380,0,0" Text="Testfile.log" VerticalAlignment="Top" Width="603" FontSize="22"/>
</Grid> </Page> |
MainPage.Xaml.cx
In C# Code wird der Pfad aus den Textfeldern ausgelesen. Hieraus wird der StorageFolder erstellt und hieraus die Datei als StorageFile geƶffnet und kopiert.
Achtung: genau hierzu ist die Einstellung mit Capability Name="broadFileSystemAccess notwendig. Denn in dieser UWP App wird die Datei einfach geƶffnet ohne zusƤtzliche User-Interaction.
Es wird also kein manueller Freigabe Datei-Dialog notwendig !
private async void btnCopy_Click(object sender, RoutedEventArgs e) { StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(tbxFolder.Text); StorageFile file = await folder.GetFileAsync(tbxFile.Text); StorageFile copyFile = await file.CopyAsync(folder, "Copied_File.txt", NameCollisionOption.ReplaceExisting); } |
Package.appxmanifest
In der Datei Package.appxmanifest muss man die Package.IgnoreableNamespaces ergƤnzen und die Capabilities ergƤnzen
<Package .. xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp rescap"> .. <Capabilities> .. <rescap:Capability Name="broadFileSystemAccess" /> </Capabilities>
|
<?xml version="1.0" encoding="utf-8"?> <Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp rescap"> <Identity Name="c76c1dbf-c893-4f40-8f82-0934dfd31490" Publisher="CN=Raimund" Version="1.0.0.0" /> <mp:PhoneIdentity PhoneProductId="c76c1dbf-c893-4f40-8f82-0934dfd31490" PhonePublisherId="00000000-0000-0000-0000-000000000000" /> <Properties> <DisplayName>test_file_open</DisplayName> <PublisherDisplayName>Raimund</PublisherDisplayName> <Logo>Assets\StoreLogo.png</Logo> </Properties> <Dependencies> <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" /> </Dependencies> <Resources> <Resource Language="x-generate" /> </Resources> <Applications> <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="test_file_open.App"> <uap:VisualElements DisplayName="test_file_open" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="test_file_open" BackgroundColor="transparent"> <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"> </uap:DefaultTile> <uap:SplashScreen Image="Assets\SplashScreen.png" /> </uap:VisualElements> </Application> </Applications>
<Capabilities> <Capability Name="internetClient" /> <uap:Capability Name="picturesLibrary" /> <rescap:Capability Name="broadFileSystemAccess" /> </Capabilities> </Package> |
Projekt Mindestversion
Notwendig hierzu ist die Version 1803 in den UWP Einstellungen
Projekt->Properties->Application
Targeting:
Target: Universal Windows
Target Version: Windows 10, version 1803 (10.0; Build 17134)