创建文件

时间:2015-12-22 12:26:52

标签: c# io win-universal-app

我创建了简单的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应用程序,因此我可能忘记使用权限执行某些操作。

问题是 - 是否可以将简单文件存储在已安装的目录中,或者是否需要将所有数据文件存储在某些共享位置下?

2 个答案:

答案 0 :(得分:2)

Package.InstalledLocation 是您安装应用并且只读的地方 - 因此您无法在那里写文件。请改用ApplicationData.LocalFolder - 这是您的应用应存储本地数据的文件夹。有关如何存储(以及在何处)的更多信息,请查看at MSDN

答案 1 :(得分:2)

默认情况下,应用可以访问某些文件系统位置。应用还可以通过文件选择器或通过声明功能访问其他位置。

所有应用可以访问的位置

创建新应用时,默认情况下可以访问以下文件系统位置: 应用安装目录。用户系统上安装应用程序的文件夹。 在应用程序的安装目录中有两种主要方法可以访问文件和文件夹:

  1. 您可以检索代表您应用的安装目录的StorageFolder,如下所示:

    Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
    
  2. 您可以使用app URI直接从应用的安装目录中检索文件,如下所示:

    using Windows.Storage;
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync("ms-appx:///file.txt");
    
  3. 应用程序的安装目录是只读位置。您无法通过文件选择器访问安装目录。 应用数据位置。您的应用可以存储数据的文件夹。安装应用程序时会创建这些文件夹(本地,漫游和临时)。 从应用的数据位置访问文件和文件夹有两种主要方法: 使用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,您将获得大量资源。