Vb.net WinRT-拒绝访问读取文件

Vb.net WinRT-拒绝访问读取文件,vb.net,windows-8,windows-runtime,Vb.net,Windows 8,Windows Runtime,我正试图写一些代码来写入文本文件。我有代码在工作。。。但今天(没有更改)它开始生成一个“拒绝访问”错误。我正在向LocalFolder(Windows.Storage.ApplicationData.Current.LocalFolder)写入数据 我是否必须在清单中声明要将文件保存在LocalStorage中?我知道我得去拿我的文件,还是我遗漏了什么?下面是我的示例方法,它演示了我如何尝试写入文件: ''' <summary> ''' Writes all

我正试图写一些代码来写入文本文件。我有代码在工作。。。但今天(没有更改)它开始生成一个“拒绝访问”错误。我正在向LocalFolder(Windows.Storage.ApplicationData.Current.LocalFolder)写入数据

我是否必须在清单中声明要将文件保存在LocalStorage中?我知道我得去拿我的文件,还是我遗漏了什么?下面是我的示例方法,它演示了我如何尝试写入文件:

        ''' <summary>
    ''' Writes all of the text to the specified file in one of the specified safe storage folders.
    ''' </summary>
    ''' <param name="text">The text to write.</param>
    ''' <param name="append">Whether or not to append the data or overwrite what is in the file.</param>
    ''' <param name="fileName">The name of the file to write the data to.</param>
    ''' <param name="safeFolder">The safe storage folder that should be written to.  These folders are isolated for the application to use
    ''' and do not require additional manifest permissions.</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Async Function WriteAllText(text As String, append As Boolean, fileName As String, safeFolder As SafeStorageFolder) As Task
        Dim folder As Windows.Storage.StorageFolder

        Select Case safeFolder
            Case SafeStorageFolder.Local
                folder = Windows.Storage.ApplicationData.Current.LocalFolder
            Case SafeStorageFolder.Roaming
                folder = Windows.Storage.ApplicationData.Current.RoamingFolder
            Case SafeStorageFolder.Temp
                folder = Windows.Storage.ApplicationData.Current.TemporaryFolder
            Case Else
                folder = Windows.Storage.ApplicationData.Current.LocalFolder
        End Select

        Dim sf As StorageFile

        If append = True Then
            sf = Await folder.CreateFileAsync(fileName, Windows.Storage.CreationCollisionOption.OpenIfExists)
        Else
            sf = Await folder.CreateFileAsync(fileName, Windows.Storage.CreationCollisionOption.ReplaceExisting)
        End If

        ' WriteTextAsync will always overwrite the file even if the existing file has been opened.  We'll use
        ' AppendTextAsync here, the above CreateFileAsync will handle whether the file has been truncated or not.
        Await FileIO.AppendTextAsync(sf, text)

    End Function
“”
''将所有文本写入指定安全存储文件夹之一中的指定文件。
''' 
''要写的文本。
''是否附加数据或覆盖文件中的内容。
''要写入数据的文件的名称。
''应写入的安全存储文件夹。这些文件夹是隔离的,供应用程序使用
'',不需要额外的清单权限。
''' 
''' 
公共共享异步函数WriteAllText(文本为字符串,追加为布尔值,文件名为字符串,safeFolder为SafeStorageFolder)作为任务
将文件夹设置为Windows.Storage.StorageFolder
选择案例安全文件夹
Case SafeStorageFolder.Local
folder=Windows.Storage.ApplicationData.Current.LocalFolder
Case SafeStorageFolder.漫游
folder=Windows.Storage.ApplicationData.Current.RoamingFolder
Case SafeStorageFolder.Temp
folder=Windows.Storage.ApplicationData.Current.Temporary文件夹
其他情况
folder=Windows.Storage.ApplicationData.Current.LocalFolder
结束选择
将sf设置为存储文件
如果append=True,则
sf=Await folder.CreateFileAsync(文件名,Windows.Storage.CreationCollisionOption.OpenIfExists)
其他的
sf=Await folder.CreateFileAsync(文件名,Windows.Storage.CreationCollisionOption.ReplaceExisting)
如果结束
'WriteTextAsync将始终覆盖该文件,即使现有文件已打开。我们将使用
'AppendTextAsync在这里,上面的CreateFileAsync将处理文件是否被截断。
等待文件IO.AppendTextAsync(sf,文本)
端函数

我在测试项目中使用了与您相同的代码逻辑,它对我来说运行良好。我没有遍历所有的append/don-not-append路径,但我能够写入每个文件夹


您是否从“选择”中设置的文件夹对象中提取了文件路径,并仔细检查是否可以在“文件资源管理器”中打开它?

我提取了。在本例中,该文件不存在,并且在创建该文件时抛出了拒绝访问。我重新启动了操作系统,运行了相同的代码,它工作了(打开了浏览器窗口,看到它被创建了)。作为参考,它将该文件存储在C:\Users*my username*]\AppData\Local\Packages*guid*\LocalState文件夹中。由于早期的异常,我无法重新创建它。下一次我会检查文件句柄,确保其他东西没有抓住它(或者某个句柄被打开)。我有一个确切的问题-它是随机的,100次中只发生1到2次。我的工作是创建一个文件备份,捕获异常并重写文件,因为Microsoft对无法提供回购的问题非常不屑一顾。不优雅,但我唯一的功能性工作。