我正在编写一个应用程序(适用于C#中的Windows 8.1,Metro应用程序),该应用程序的资源中包含资源。我希望用户能够保存这些,所以我有一个按钮,让他们选择一个位置并保存文件。我使用了很多文件类型,其中包括一些(我没有完成添加文件类型,因为我给它进行了测试)。我收到以下错误:
An exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll but was not handled in user code
其他信息:访问被拒绝。 (HRESULT异常:0x80070005(E_ACCESSDENIED))
这是我的代码:
FileSavePicker saver = new FileSavePicker();
saver.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
saver.FileTypeChoices.Add("Plain Text", new List<string>() { ".txt" });
saver.FileTypeChoices.Add("PowerPoint Presentation", new List<string>() { ".ppt" });
saver.FileTypeChoices.Add("Executable file", new List<string>() { ".exe" });
saver.FileTypeChoices.Add("PDF", new List<string>() { ".pdf" });
saver.DefaultFileExtension = ".docx";
saver.SuggestedFileName = "New Document";
StorageFile file = await saver.PickSaveFileAsync();
if (null != file)
{
var filey = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(ViewUri.Text);
await Windows.Storage.FileIO.WriteBytesAsync(filey, new byte[4000]);
//Saved, tell the user
}
else
{
//Error, tell the user
}
'ViewUri.Text'不应该是错误,因为它在代码的另一部分打开文件(ViewUri实际上显示文件的位置)。该应用程序崩溃在远离Windows ....线。我有以下问题,并希望得到任何帮助:
WriteBytesAsync的第二个参数的正确用法是什么?新字节[4000]只是猜测。
是否可以保存具有大多数文件类型的文件(因此列出了每个支持的文件类型,并且它们必须选择正确的类型,并且它将保存)或者我是否必须检查它们是什么文件保存是,然后在不同的条件下保存?
导致错误的原因(如果不是字节[4000]部分)?
感谢任何帮助。谢谢!
答案 0 :(得分:1)
我终于搞砸了! 因此,虽然它不涉及让用户保存文件,但它确实让他们选择将其复制到的位置。把它复制到那里。这是我的解决方案,以防其他人被这个难倒(我真的找不到这方面的任何信息):
FolderPicker picker = new FolderPicker();
picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
picker.FileTypeFilter.Add(".pdf");
StorageFolder fold = await picker.PickSingleFolderAsync();
StorageFile filey = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(ViewUri.Text);
StorageFolder storageFolder = fold;
try
{
await filey.CopyAsync(storageFolder);
// let them know, done!
}
catch (System.UnauthorizedAccessException)
{
// an error occurred
}
基本上,它会询问用户他们想要保存的位置。然后它将文件复制到该位置。将ViewUri.Text替换为文件的字符串位置,例如Assets \ mine.pdf
这也适用于所有(?)文件类型 - 至少据我所知。
感谢。