UnauthorizedAccessException错误WindowsPhone C#

时间:2014-10-25 10:58:10

标签: c# windows-phone-8.1

    private async void  Button_Click(object sender, RoutedEventArgs e)
    {            
        await createFile();
        await readFile();
    }
    private async Task readFile()
    {
        StorageFolder local =  KnownFolders.PicturesLibrary;
        if (local != null)
        {
            var dataFolder = await local.GetFolderAsync("msgGen");

            var file = await dataFolder.OpenStreamForReadAsync("Msg.dat");

            StreamReader msg = new StreamReader(file);

            this.textblock.Text = msg.ReadLine();                
        }
    }
    private async Task createFile()
    {
        byte[] mensaje = System.Text.Encoding.UTF8.GetBytes("Este Mensaje".ToCharArray());

        StorageFolder local = KnownFolders.DocumentsLibrary;

        var dataFolder = await local.CreateFolderAsync("msgGen", CreationCollisionOption.ReplaceExisting);

        var file = await dataFolder.CreateFileAsync("Msg.dat", CreationCollisionOption.OpenIfExists);

        var s = await file.OpenStreamForWriteAsync();

        s.Write(mensaje,0,mensaje.Length);



    }

这段代码可能会丢失一些{或},但它已被考虑在内。无论如何这是我点击按钮时的代码。我使用MSDN中的示例完成了它并尝试了一些不同的东西,如你所见代码。无论如何我的问题是我得到了这个错误并尝试了很多这个网站没有运气的东西。我认为错误是因为我没有管理员权限,但老实说我不知道​​我做错了什么。我的问题是如何摆脱我在标题中写的错误?

这是在C#中为Windows Phone 8.1完成的。感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

根据MSDN KnownFolders.DocumentsLibrary

  

您无法在Windows Phone应用商店中使用文档库。

您可以使用应用的本地文件夹。

StorageFolder local = ApplicationData.Current.LocalFolder;

完成写作/阅读后,需要关闭流。

所以您的代码可以修复如下

private async Task readFile()
{
    StorageFolder local = ApplicationData.Current.LocalFolder;
    if (local != null)
    {
        //...your code

        //Close the stream after using it
        msg.Close();
    }
}

private async Task createFile()
{
    //...your code
    StorageFolder local = ApplicationData.Current.LocalFolder;
    //...your code

    //Close the stream after using it
    s.Close();
}

答案 1 :(得分:0)

首先你应该将图片库的功能添加到sln中的Package.appxmanifest文件中:

<Capabilities>
<Capability Name="internetClientServer" />
<Capability Name="picturesLibrary" />
</Capabilities>

然后你还需要将fileTypeAssociation添加到Package.appxmanifest文件中的Application节点:

<Extensions>
    <Extension Category="windows.fileTypeAssociation">
      <FileTypeAssociation Name=".dat">
        <DisplayName>DatFile</DisplayName>
        <SupportedFileTypes>
          <FileType>.dat</FileType>
        </SupportedFileTypes>
      </FileTypeAssociation>
    </Extension>
  </Extensions>

并且您的代码有一些错误:

1:在KnownFolders.DocumentsLibrary中创建文件并在KnownFolders.PicturesLibrary中读取文件?

2:写入流尚未处理。

修复你的代码:

private async Task readFile()
    {
        StorageFolder local = KnownFolders.PicturesLibrary;
        if (local != null)
        {
            var dataFolder = await local.GetFolderAsync("msgGen");
            var file = await dataFolder.GetFileAsync("Msg.dat");
            var stream = (await file.OpenReadAsync()).AsStream();
            var msg = new StreamReader(stream);
            var text = msg.ReadLine();

            this.textBlock.Text = text;
            stream.Dispose();
        }
    }

private async Task createFile()
    {
        byte[] mensaje = System.Text.Encoding.UTF8.GetBytes("Este Mensaje".ToCharArray());

        var local = KnownFolders.PicturesLibrary;

        var dataFolder = await local.CreateFolderAsync("msgGen", CreationCollisionOption.ReplaceExisting);

        var file = await dataFolder.CreateFileAsync("Msg.dat", CreationCollisionOption.OpenIfExists);

        var s = await file.OpenStreamForWriteAsync();

        s.Write(mensaje, 0, mensaje.Length);

        s.Dispose();

    }

并且测试结果是:

enter image description here