📜  访问被拒绝的字符串以保存文件 uwp xamarin - C# (1)

📅  最后修改于: 2023-12-03 15:41:45.540000             🧑  作者: Mango

访问被拒绝的字符串以保存文件 UWP Xamarin - C#

问题描述

在开发 UWP Xamarin 应用程序时,有时您需要让用户保存文件。你可能会遇到一个错误,指出访问被拒绝的字符串以保存文件。

问题原因

该错误是因为您尝试保存到受保护的位置,例如 ApplicationData 或 LocalStorage。UWP 应用程序不能直接访问这些位置,因为它需要由用户授权。

解决方案
1. 请求访问权限

您可以请求访问权限,让用户授权保存到受保护位置。可以使用以下代码实现:

// 请求 ApplicationData 访问权限
StorageFolder applicationFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
await Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", applicationFolder);

// 请求 LocalStorage 访问权限
StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalCacheFolder;
await Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", localFolder);
2. 保存到可访问的位置

另一种解决方案是将文件保存到用户可以访问的位置。可以使用以下代码实现:

// 打开文件选择器
var picker = new Windows.Storage.Pickers.FileSavePicker();
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
picker.FileTypeChoices.Add("Text", new List<string>() { ".txt" });
picker.SuggestedFileName = "New Document";

// 保存文件
Windows.Storage.StorageFile file = await picker.PickSaveFileAsync();
if (file != null)
{
    // 在这里写入文件
}
3. 添加文件类型关联

如果您的应用程序需要访问受保护位置用于保存特定类型的文件,您可以添加与该文件类型相关联的文件类型关联。可以使用以下代码实现:

// 添加文件类型关联
var fileTypeAssociation = new Windows.ApplicationModel.AppExtensions.AppExtension();
fileTypeAssociation.Id = "MyFileTypeAssociation";
fileTypeAssociation.Position = Windows.ApplicationModel.AppExtensions.AppExtensionInsightsPosition.First;
fileTypeAssociation.Category = "windows.fileTypeAssociation";
fileTypeAssociation.Properties.Add("fileType", ".myFileType");
await fileTypeAssociation.SaveAsync();

// 访问受保护的位置以保存文件
StorageFolder applicationFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFile file = await applicationFolder.CreateFileAsync("NewFile.myFileType", Windows.Storage.CreationCollisionOption.GenerateUniqueName);
await Windows.Storage.FileIO.WriteTextAsync(file, "Hello, World!");
结论

访问被拒绝的字符串以保存文件是 UWP Xamarin 应用程序开发中常见的问题。可以通过请求访问权限、保存到可访问的位置或添加文件类型关联来解决此问题。上面提供的代码片段提供了一些实现解决方案的线索。