【问题标题】:CreateFileAsync creates blocked fileCreateFileAsync 创建被阻止的文件
【发布时间】:2018-05-29 05:32:29
【问题描述】:

我正在开发一个需要在本地存储之外创建文件的 UWP 应用。我使用文件夹选择器让用户选择输出导向器,然后使用LocalSettings 存储该选择并将文件夹添加到FutureAccessList

然后,我使用StorageFile.CreateFileAsync创建文件(成功,没有错误或异常)。

问题是,文件是用阻塞创建的,你可以在文件属性对话框中看到:

有没有一种特定的方法来创建没有这个文件的文件,或者使用 C# 解除阻塞的方法?

【问题讨论】:

  • 您确定您使用的文件格式扩展名正确吗??
  • 是的。对于测试,它只是一个 .txt 文件。而且,文件确实打开了。

标签: c# uwp windows-10-universal storagefile


【解决方案1】:

我想在这里分享我的一些发现:

  1. 是的,我可以在使用图像进行测试时重现这一点。我认为其他文件可能有相同的结果
  2. 根据下面的SO线程:thread1thread2,属性写在System.AppZoneIdentifier中,如果你从UWP应用程序中检查它是一个扩展属性。(属性列表可以参考@987654324 @)
  3. 我用代码测试得到这个extended property

     IDictionary<string, object> extraProperties = await file.Properties.RetrievePropertiesAsync(propertiesName);
        var propValue = extraProperties[appzoneProperty];
        if (propValue != null)
        {
            fileProperties.AppendLine("appzone property: " + propValue);
        }
    

    我总是得到空值。据我了解,这可能与许可有关。

  4. 所以最后我想如果你需要修改这个功能,你可能不得不考虑使用desktopbridge相关技术来使用FullTrustProcessLauncher。这样,您也许可以运行 win32 进程来修改文件的属性。

【讨论】:

  • 我也看到了这两个线程,但我相信这些解决方案不适用于 UWP。将 UWP 链接到 Win32 应用程序的唯一方法是“侧面加载”UWP,这不是我想要的方向。
  • @JohnieKarr FullTrustProcesslancher 是桌面桥方式,与“sideload”不同。你可以看到这个sample,不同的是你需要添加capbility并填写这个form。对于 UWP 特定的解决方案,恐怕我们没有权限修改这个属性。
  • 感谢指正!我会试一试这条路线。
  • 您想要 System.ZoneIdentifier 而不是 AppZoneIdentifier。 0为畅通,3为网络标志,见URLZone
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
相关资源
最近更新 更多