UWP。将文件从FileOpenPicker复制到localstorage

时间:2016-08-23 22:54:04

标签: c# visual-studio uwp

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

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

4 个答案:

答案 0 :(得分: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 (对不起链接,但从那里复制信息没有用)

答案 1 :(得分:1)

用户使用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 :(得分:0)

你可以:

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

YourNameSpace.Properties.Settings.fileToLoad;

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

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

......和其他人。

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

答案 3 :(得分:0)

只需添加以上建议,Official Microsoft document的以下示例将显示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
}