【发布时间】:2014-01-29 03:57:41
【问题描述】:
我正在编写一个应用程序(适用于 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 的第二个参数的正确用法是什么? new byte[4000] 只是一个猜测。
是否可以保存具有大多数文件类型的文件(因此列出了每种支持的文件类型,并且它们必须选择正确的类型,并且它会保存)还是我必须检查它们是什么文件保存是然后在不同的条件下保存?
是什么导致了错误(如果不是 byte[4000] 部分)?
感谢任何帮助。谢谢!
【问题讨论】:
标签: c# microsoft-metro windows-8.1