在UWP中创建文件和文件夹

时间:2017-08-30 09:15:27

标签: c# uwp

我看了很多stackoverflow帖子和文章,但仍然没有设法在UWP中创建一个文件。在WPF中,它非常容易,但UWP的工作方式不同。

我在清单文件中添加了以下内容:

  <Capabilities>
    <uap:Capability Name="documentsLibrary" />
  </Capabilities>

现在我不确定接下来该做什么。在我的文档文件夹中,我有一个名为“Project Files”的子文件夹。我想在那里创建文件夹和文件。这是如何在UWP中完成的?我真的不明白。

2 个答案:

答案 0 :(得分:2)

我相信UWP既不推荐也不允许使用文档库。见https://blogs.msdn.microsoft.com/wsdevsol/2013/05/09/dealing-with-documents-how-not-to-use-the-documentslibrary-capability-in-windows-store-apps/

如果您一边加载应用程序并使用文档库功能,该应用程序只能访问已声明的文件类型,而不能访问文档中的所有内容。 见https://msdn.microsoft.com/en-us/library/windows/apps/hh464936.aspx#special_capabilities

请注意,此特殊功能不允许您在商店中通过应用认证,除非您首先通过一些特殊程序与MS联系。

要创建文件夹,请使用StorageFolder。要创建文件,请使用StorageFile。 见https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-reading-and-writing-files

答案 1 :(得分:1)

正如微软在他们的文档中所述,它重新开始不通过UWP应用程序使用文档库,而是选择内置存储,除非绝对必要。

如果你使用文件夹选择器,有一种简单的方法可以解决这个问题

 private async void buttonClick(){
            FolderPicker folderPicker = new FolderPicker();
     folderPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
      folderPicker.FileTypeFilter.Add("*");

          StorageFolder folder=  await folderPicker.PickSingleFolderAsync();
         if (folder != null) { 

              //  do Things On Folder

          }
           else
          {
              MessageDialog dialog = new MessageDialog("you selected nothing");
             await dialog.ShowAsync();
          }

}

以上打开文件夹选择对话框,它会返回用户选择的文件夹,这是访问应用程序文件夹外部位置的推荐方式。

以下是如何在此文件夹中创建新文件:

string name ="myTitle.txt";
            await folder.CreateFileAsync(name, CreationCollisionOption.GenerateUniqueName);

这是如何打开和写入文件:

         try {
                           StorageFile myFile = await folder.GetFileAsync(name);
                           await Windows.Storage.FileIO.WriteTextAsync(myFile,  "myStringContent");

                               }
                       catch (Exception e)
                       {
                           Debug.WriteLine("Failure: "+e.Message);

                           return;
                       }

请记住,如果您使用本地存储,则始终可以避免打开对话框,它会将应用程序的存储文件夹返回到一行,如下所示:

 var folder= ApplicationData.Current.LocalFolder;