Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#文件保存选择器错误Metro应用程序_C#_Microsoft Metro_Windows 8.1 - Fatal编程技术网

C#文件保存选择器错误Metro应用程序

C#文件保存选择器错误Metro应用程序,c#,microsoft-metro,windows-8.1,C#,Microsoft Metro,Windows 8.1,我正在编写一个应用程序(适用于C#中的Windows 8.1,Metro应用程序),该应用程序的资产中将包含资源。我希望用户能够保存这些,所以我有一个按钮,让他们选择一个位置并保存文件。我使用了很多文件类型,其中一些是包含在内的(我没有抽出时间来完成添加文件类型的测试)。我得到以下错误: An exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll but was not handled in

我正在编写一个应用程序(适用于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_访问被拒绝))

这是我的代码:

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
        }
FileSavePicker saver=newfilesavepicker();
saver.SuggestedStartLocation=PickerLocationId.DocumentsLibrary;
saver.FileTypeChoices.Add(“纯文本”,新列表(){.txt});
添加(“PowerPoint演示文稿”,新列表(){.ppt});
saver.FileTypeChoices.Add(“可执行文件”,new List(){.exe});
saver.FileTypeChoices.Add(“PDF”,newlist(){.PDF”});
saver.DefaultFileExtension=“.docx”;
saver.SuggestedFileName=“新建文档”;
StorageFile file=wait saver.PickSaveFileAsync();
if(null!=文件)
{
var filey=wait Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(ViewUri.Text);
等待Windows.Storage.FileIO.WriteBytes同步(filey,新字节[4000]);
//已保存,请告诉用户
}
其他的
{
//错误,请告诉用户
}
“ViewUri.Text”不应该是错误,因为它在代码的另一部分中打开了文件(ViewUri基本上显示了文件的位置)。应用程序在远离的Windows上崩溃。。。。线路。我有以下问题,希望得到任何帮助:

  • WriteBytesAsync的第二个参数的正确用法是什么?新字节[4000]只是一个猜测

  • 是否可以使用大多数文件类型保存文件(因此列出了每个受支持的文件类型,并且他们必须选择正确的类型,然后才能保存),或者我必须检查他们保存的文件是什么,然后在不同的条件下保存

  • 导致错误的原因是什么(如果不是字节[4000]部分)

  • 感谢您的帮助。谢谢

    我终于破解了它! 因此,虽然它不涉及让用户将文件另存为,但它允许用户选择将文件复制到哪里&将文件复制到哪里。这是我的解决方案,以防其他人被这件事难倒(我真的在任何地方都找不到这类事情的太多信息):

    本质上,它会询问用户要保存到哪里。然后将文件复制到该位置。将ViewUri.Text替换为文件的字符串位置,例如Assets\mine.pdf

    这也适用于所有(?)文件类型-至少据我所知

    谢谢

    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
            }