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

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

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

4个回答

4

用户使用 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 );
}

2
StorageFile file = await openPicker.PickSingleFileAsync();
if (file != null)
{
    var yourPath = file.Path;
}

但是它不会按照你的期望工作。请记住,你不能从你(你的应用程序)无权访问的位置打开文件。

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


我对你的问题有不同的理解。RTDev告诉你如何获取文件名,而我告诉你如何使该文件名在下一次使用时保持不变。在我们两个人之间,你应该可以顺利进行! - Shannon Holsinger
@RTDev,是的,你说得对!所以问题应该是如何/在哪里保存用户选择的文件并在下次自动打开它!! - Rpgccv

0
你可以:
1)将文件名存储在项目设置中;
YourNameSpace.Properties.Settings.fileToLoad;

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

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

...等等。

我假设您正在使用WinForms或Console应用程序。如果您正在使用WebForm,则需要将文件名存储在cookie中,以便在用户登录或提供凭据之前将正确的文件附加到正确的用户。对于Webforms,请查看cookie的使用。


Shannon Holsinger UWP ;-) - Rpgccv

0

除了上述建议,还可以参考微软官方文档提供的示例,演示如何存储文件以便将来访问

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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接