UWP 更强大的文件获取能力
2024-09-01 20:32:47
默认情况下,通用 Windows 平台 (UWP) 应用可以访问特定文件系统位置。 应用也可以通过文件选取器或通过声明功能访问其他位置。
在创建新的应用时,默认情况下你可以访问以下文件系统位置:
1. 应用程序安装目录
Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
或者直接指定需要的文件
using Windows.Storage;
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///file.txt"));
2. 应用程序数据位置
使用 ApplicationData 属性检索应用数据文件夹。
using Windows.Storage;
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
如果希望访问应用的漫游或临时文件夹,可以改用 RoamingFolder 或 TemporaryFolder 属性。
3. 用户的“下载”文件夹
你可以在用户的下载文件夹中创建文件
using Windows.Storage;
StorageFile newFile = await DownloadsFolder.CreateFileAsync("file.txt");
你可以在用户的“下载”文件夹中创建子文件夹
using Windows.Storage;
StorageFolder newFolder = await DownloadsFolder.CreateFolderAsync("New Folder");
4. 其它文件夹
文档 | DocumentsLibrary
注意:必须将文件类型关联(该关联声明应用可以在此位置中访问的特定文件类型)添加到应用清单。 你的应用使用此功能的情况: |
KnownFolders.DocumentsLibrary |
音乐 | MusicLibrary 另请参阅音乐、图片和视频库中的文件和文件夹。 |
KnownFolders.MusicLibrary |
图片 | PicturesLibrary 另请参阅音乐、图片和视频库中的文件和文件夹。 |
KnownFolders.PicturesLibrary |
视频 | VideosLibrary 另请参阅音乐、图片和视频库中的文件和文件夹。 |
KnownFolders.VideosLibrary |
可移动设备 | RemovableDevices
必须将文件类型关联(该关联声明应用可以在此位置中访问的特定文件类型)添加到应用清单。 另请参阅访问 SD 卡。 |
KnownFolders.Re |
5. 更强大文件获取能力
5. 更强大文件获取能力
5. 更强大文件获取能力
这功能几乎颠覆了UWP之前的历史,可以获取除了C盘以外所有的文件。
但是,这个权限需要跟用户申请,用户手动确认了,你才可以。
在执行你的超能力之前,你需要引导用户,给你的App权限:隐私——文件系统。
使用代码直达:
await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings:ms-settings:privacy-broadfilesystemaccess"));
这样就打开了这么一个界面。
然后就是配置一下你的Package.appxmanifest文件。用文本查看器打开
添加下面的代码
应该你的文件里面存在了IgnorableNamespace,你只需要把rescap加进去即可。
<Package
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp uap5 rescap">
...
<Capabilities>
<rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>
然后开始写代码测试:
string dir = "D:\\";
string fileName = "sample.txt"; private async void Read_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
{
StorageFile file = await StorageFile.GetFileFromPathAsync(Path.Combine(dir, fileName));
TextBox_Content.Text = await FileIO.ReadTextAsync(file);
} private async void Write_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
{
StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(dir);
StorageFile file = await folder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists);
await FileIO.WriteTextAsync(file, TextBox_Content.Text);
}
最新文章
- Dell xps 13 9350待机时总是关机的处理方法
- Linux系统启动过程分析
- phpQuery—基于jQuery的PHP实现
- (转) ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(34)、chr(39)、chr(
- Demo学习: Closable Tabs
- JS获得QQ号码的昵称,头像,生日
- 关于offsetWidth innerWidth的使用
- android 开发环境搭建 (转)
- Lucene学习总结之二:Lucene的总体架构
- 上传form表单
- hdu2534-Score
- win8 wifi开关显示关闭,且设置里面wifi开关显示灰色的解决办法
- 拥抱.NET Core系列:Logging (1)
- 包建强的培训课程(12):iOS深入学习(内存管理、Block和GCD等)
- mysql distinct 用法详解及优化
- BZOJ[Usaco2017 Jan]Promotion Counting——线段树合并
- 测试那些事儿—BUG
- [ORA-28001: the password has expired]的处理
- Python开发【项目】:博客后台
- UnicodeEncodeError: &#39;ascii&#39; codec can&#39;t encode characters in position 16-22: ordinal not in range(128)