【问题标题】:Replacing files throws UnauthorizedAccessException in WinRT / Win8在 WinRT / Win8 中替换文件会引发 UnauthorizedAccessException
【发布时间】:2012-09-21 06:52:13
【问题描述】:

每隔一段时间,StorageFiles 就会被锁定,并且在尝试覆盖它们时我会收到 UnauthorizedAccessException。我无法复制它,它只会随机发生。这是创建文件的代码:

using (var stream = new MemoryStream())
{
    // ...populate stream with serialized data...

    StorageFile file;
    Stream fileStream;

    try
    {
        file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
    }
    catch (UnauthorizedAccessException ex)
    {
        Debug.WriteLine("Access denied on file {0}", fileName);
        return;
    }

    fileStream = await file.OpenStreamForWriteAsync();

    using (fileStream)
    {
        stream.Seek(0, SeekOrigin.Begin);
        await stream.CopyToAsync(fileStream);
        await fileStream.FlushAsync();
    }
}

一旦文件开始抛出 UnauthorizedAccessException,它总是会抛出它。好像系统已锁定文件,我无法触摸它。我必须卸载应用程序并重建。

当我在我的文档中打开文件时,我可以在那里看到该数据。一切安好。写得很成功。

谁能看到我的代码有问题?

【问题讨论】:

  • 在我的 Windows 8.1 上的应用中效果相同。替换文件随机失败。
  • 这里的情况相同。我在筛选数据时发现的一个想法是,这不会影响每台设备。在我的用户群中,这个错误只发生在 3-5% 的设备上。

标签: windows-8 windows-runtime


【解决方案1】:

您是否将文件令牌保存在将来的访问列表中?我在加载文件并稍后尝试保存更新时遇到了这个问题。一旦我开始使用未来的访问列表,问题就消失了。

http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.accesscache.storageitemaccesslist

【讨论】:

    【解决方案2】:

    可能会同时从代码中的两个不同点访问同一个文件。

    【讨论】:

      猜你喜欢
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多