我创建了简单的UWP应用程序,我只想将序列化数据存储到文件中,以后可以访问(当用户在一段时间后重新打开应用程序时)。
我要存储文件的位置是当前安装的位置,我的序列化代码如下所示:
private void SerializeData()
{
XmlSerializer ser = new XmlSerializer(typeof(ObservableCollection<MyTask>));
Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
using (var writer = new StreamWriter(File.Open(Path.Combine(installedLocation.Path,sFileName), FileMode.OpenOrCreate)))
{
try
{
ser.Serialize(writer, sData);
}
catch (Exception ex) { }
}
}
这是MyTask
型号:
public class MyTask:ViewModelBase
{
private string _Name;
public string Name
{
get { return _Name; }
set
{
_Name = value;
OnPropertyChanged("Name");
}
}
}
我得到的错误是UnauthorizedAccessException
。我记得当我在WPF下创建常规Windows 7应用程序时,我对权限没有任何问题。这是我的第一个UWP应用程序,因此我可能忘记使用权限执行某些操作。
问题是 - 是否可以将简单文件存储在已安装的目录中,或者是否需要将所有数据文件存储在某些共享位置下?
答案 0 :(得分:2)
Package.InstalledLocation 是您安装应用并且只读的地方 - 因此您无法在那里写文件。请改用ApplicationData.LocalFolder - 这是您的应用应存储本地数据的文件夹。有关如何存储(以及在何处)的更多信息,请查看at MSDN。
答案 1 :(得分:2)
默认情况下,应用可以访问某些文件系统位置。应用还可以通过文件选择器或通过声明功能访问其他位置。
所有应用可以访问的位置
创建新应用时,默认情况下可以访问以下文件系统位置: 应用安装目录。用户系统上安装应用程序的文件夹。 在应用程序的安装目录中有两种主要方法可以访问文件和文件夹:
您可以检索代表您应用的安装目录的StorageFolder,如下所示:
Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
您可以使用app URI直接从应用的安装目录中检索文件,如下所示:
using Windows.Storage;
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync("ms-appx:///file.txt");
应用程序的安装目录是只读位置。您无法通过文件选择器访问安装目录。 应用数据位置。您的应用可以存储数据的文件夹。安装应用程序时会创建这些文件夹(本地,漫游和临时)。 从应用的数据位置访问文件和文件夹有两种主要方法: 使用ApplicationData属性检索应用程序数据文件夹。 例如,您可以使用ApplicationData.LocalFolder来检索代表您应用的本地文件夹的StorageFolder,如下所示:
using Windows.Storage;
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
您可以使用应用URI直接从应用的本地文件夹中检索文件,如下所示:
using Windows.Storage;
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync("ms-appdata:///local/file.txt");
用户的下载文件夹:
using Windows.Storage;
StorageFile newFile = await DownloadsFolder.CreateFileAsync("file.txt");
以及更多...进一步参考goto dev.windows.com,您将获得大量资源。