C# 在DocumentsLibrary中创建文件

C# 在DocumentsLibrary中创建文件,c#,serialization,xamarin,uwp,storage,C#,Serialization,Xamarin,Uwp,Storage,我创建了一个应用程序,将用户数据保存到一个xml文件中,并希望该xml文件位于文档库中。 该应用程序是在PCL中创建的,但我的主要目标是一个UWP设备(电话)。我为此使用了DependencyService,因为PCL中没有System.IO.FileStream 因此,在这里,我在我的PCL中单击创建文件: private void Senden_Clicked(object sender, EventArgs e) { var s = Dependen

我创建了一个应用程序,将用户数据保存到一个xml文件中,并希望该xml文件位于文档库中。 该应用程序是在PCL中创建的,但我的主要目标是一个UWP设备(电话)。我为此使用了DependencyService,因为PCL中没有System.IO.FileStream

因此,在这里,我在我的PCL中单击创建文件:

private void Senden_Clicked(object sender, EventArgs e)
        {
            var s = DependencyService.Get<IFileHelper>().MakeFileStream();
            StreamWriter sw = new StreamWriter(s, Encoding.UTF8);
            XMLDaten xmldat = new XMLDaten(); //Seriazable Class
            XmlSerializer serializer = new XmlSerializer(typeof(XMLDaten));
            serializer.Serialize(sw, xmldat);
            s.Dispose();
        }
这是我创建的接口(位于名为classes的文件夹中):


不幸的是,DocumentsLibrary返回一个空路径。我怎样才能避开这件事?我已经看到了一些例子,但是没有什么能让应用程序变得如此简单,而不必使用任务和异步类。在您询问之前,是的,我已在Package.appxManifest中添加了DocumentsLibrary功能,并添加了所需的扩展名,以便可以将文件写入文档库。

如果已经有功能,则只需添加以下行:

<uap:Capability Name="documentsLibrary" />

谢谢@NicoZhu!正如在我的第一个代码段中所写的,我需要一个用于button_clicked处理程序中StreamWriter sw的文件流,因为这是这里唯一有效的重载。我将尝试您的解决方案,并报告Stream是否也是StreamWriter重载的有效类型。我编辑了我的问题,以便您也可以查看界面。我不太明白public irandomaccesstream MakeFileStream(){…}做了什么,或者我应该如何更改我的IFileHelper接口来完成工作,有什么建议吗?
public irandomaccesstream MakeFileStream()
IFileHelper
接口方法。它将执行公共异步任务MakeFileStreamAsync()方法。我在
公共IRandomAccessStream MakeFileStream()接口方法中得到“接口成员不能有定义”错误。好的,得到了,我必须返回Task.Result.AsStream();
namespace myProject.classes
{

    public interface  IFileHelper
    {
        Stream MakeFileStreamAsync();

    }
}
<uap:Capability Name="documentsLibrary" />
  <Extensions>
    <uap:Extension Category="windows.fileTypeAssociation">
      <uap:FileTypeAssociation Name=".txt">
        <uap:DisplayName>Text</uap:DisplayName>
        <uap:SupportedFileTypes>
          <uap:FileType>.jpg</uap:FileType>
          <uap:FileType>.txt</uap:FileType>
          <uap:FileType>.gif</uap:FileType>
          <uap:FileType>.doc</uap:FileType>
          <uap:FileType>.xls</uap:FileType>
          <uap:FileType>.xml</uap:FileType>
        </uap:SupportedFileTypes>
      </uap:FileTypeAssociation>
    </uap:Extension>
  </Extensions>
 public IRandomAccessStream MakeFileStream()
  {
      var task = MakeFileStreamAsync();
      task.Wait();
      return task.Result;
  }

  public async Task<IRandomAccessStream> MakeFileStreamAsync()
  {
      StorageFolder sf = KnownFolders.DocumentsLibrary;

      var file = await sf.CreateFileAsync("daten.xml", CreationCollisionOption.OpenIfExists);

      using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
      {
          return stream;
      }
  }