UWP.将文件从FileOpenPicker复制到本地存储

本文关键字:存储 复制 FileOpenPicker 文件 UWP | 更新日期: 2023-09-27 18:03:37

FileOpenPicker picker = new FileOpenPicker();
picker.ViewMode = PickerViewMode.Thumbnail;
picker.SuggestedStartLocation = PickerLocationId.ComputerFolder;
picker.FileTypeFilter.Add(".txt");

用户选择要打开的文件。我如何将该文件存储/复制/保存到本地存储以备将来使用,这样每次打开应用程序时,它都会自动选择该文件?

UWP.将文件从FileOpenPicker复制到本地存储

用户使用FileOpenPicker打开文件后,可以使用StorageApplicationPermissions API"缓存"对其的访问。

一旦你有了想要自动打开的StorageFile,你就可以使用以下代码"缓存"你对它的访问:

string token = StorageApplicationPermissions.FutureAccessList.Add( file );

你得到的是一个字符串令牌,你可以将其保存在应用程序设置中。下次打开应用程序时,您可以使用以下代码再次检索文件:

StorageFile file = 
   await StorageApplicationPermissions.FutureAccessList.GetFileAsync(token);

请注意,此API最多存储1000个项目,因此如果您希望添加更多项目,则必须确保删除旧文件,否则将无法添加新文件。

还有另一种选择-StorageApplicationPermissions.MostRecentlyUsedList,您可以使用与FutureAccessList相同的方式,但它具有自动管理列表的优势。它最多可以存储25件物品,但在不再需要时可以自动删除最旧的物品。

还要注意,此API不仅可以缓存对文件的访问,还可以缓存对文件夹(StorageFolder(的访问。

正在将文件复制到AppData文件夹

如果您只想创建所选文件的本地副本,可以将其复制到应用程序的本地文件夹中。

var file = await picker.PickSingleFileAsync();
if ( file != null )
{
   await file.CopyAsync( ApplicationData.Current.LocalFolder );
}
StorageFile file = await openPicker.PickSingleFileAsync();
if (file != null)
{
    var yourPath = file.Path;
}

但它不会像你期望的那样起作用。但请记住,您无法从您(您的应用程序(无法访问的位置打开文件。

编辑:是的,我在评论中看到我错过了问题的某些部分;(存储信息以备将来重用的最简单方法是使用LocalSettingshttps://msdn.microsoft.com/library/windows/apps/windows.storage.applicationdata.localsettings.aspx(很抱歉链接,但从那里复制信息没有用(

您可以:

1( 将文件名存储在项目设置中;

YourNameSpace.Properties.Settings.fileToLoad;

2( 将文件名写入本地文件(查看TextWriter命名空间(;

3( 如果您的应用程序是数据驱动的,请将文件名存储在数据库中

以及其他。

我在这里假设您使用的是WinForms或Console应用程序。如果你使用的是webForm,你需要将文件名存储在cookie中,这样你就可以在正确的用户登录或给你证书之前将正确的文件附加到他们身上。那么,对于Webforms,请查看Cookie的使用情况。

为了补充上述建议,以下来自微软官方文档的示例显示了how to Store file for future access:

var openPicker = new FileOpenPicker();
StorageFile file = await openPicker.PickSingleFileAsync();
// Process picked file
if (file != null)
{
    // Store file for future access
    Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.Add(file);
}
else
{
    // The user didn't pick a file
}