CreateFileAsync 创建被阻止的文件

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

您确定您使用的文件格式扩展名正确吗?? 是的。对于测试,它只是一个 .txt 文件。而且,文件确实打开了。 【参考方案1】:

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

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

    我用代码测试得到这个extended property:

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

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

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

【讨论】:

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

以上是关于CreateFileAsync 创建被阻止的文件的主要内容,如果未能解决你的问题,请参考以下文章

请求在 WAMP 上被阻止,但在 XAMPP 上允许 CORS

请求在 WAMP 上被阻止,但在 XAMPP 上允许 CORS

Java安全设置问题:程序被阻止,添加例外站点无效。

Google 选择器身份验证弹出窗口被阻止

如何阻止 Windows 批处理文件提前退出?

极其奇怪的行为:当脚本被阻止然后被允许时,IE11 似乎创建了一个不可见的选项卡 - 如何修复它?