File io 声明broadFileSystemAccess功能时文件IO操作不工作

File io 声明broadFileSystemAccess功能时文件IO操作不工作,file-io,uwp,windows-10-universal,File Io,Uwp,Windows 10 Universal,我在应用程序开发过程中使用“broadFileSystemAccess”功能时遇到了一些奇怪的行为,例如: 我正在使用上述功能访问整个文件系统和我保留的应用程序的最低和最高版本ver 17134(RS4),尽管声明了broadFileSystemAccess功能,但下面的API仍抛出拒绝访问的异常 API如下所示: ZipFile.CreateFromDirectory-来自System.IO命名空间 请参阅上述API失败的示例 从FluentFTP下载FileAsync从nuget下载第三方

我在应用程序开发过程中使用“broadFileSystemAccess”功能时遇到了一些奇怪的行为,例如:

我正在使用上述功能访问整个文件系统和我保留的应用程序的最低和最高版本ver 17134(RS4),尽管声明了
broadFileSystemAccess
功能,但下面的API仍抛出拒绝访问的异常

API如下所示:

  • ZipFile.CreateFromDirectory
    -来自
    System.IO
    命名空间

    请参阅上述API失败的示例

  • 从FluentFTP下载FileAsync
    从nuget下载第三方库

    请参阅上述API失败的示例

Imp注意:只有当最小版本为17134(RS4)及更高版本时,观察值才高于API的失败值。当min版本保持在15063及更低版本时,这些API的工作


请帮助解决上述问题。

问题在于
broadFileSystemAccess
功能仅适用于UWP中新的
Windows.Storage
API。不允许访问您正在使用的经典文件IO API


您可以在中验证这一点。这意味着您必须用使用新API的替代方案替换代码,或者将需要使用的文件复制到经典API可以访问的位置,如
ApplicationData.Current.LocalFolder

作为.NET标准工作的一部分,.NET处理RS3中更改的代理文件路径的方式。在RS3之前,
System.IO
类型会尝试在后台使用WinRT API来访问代理文件,只要用户授予应用程序访问权限,代理文件就可以工作

从RS3开始,API更改为仅使用原始Win32 API(作为标准化工作的一部分)。现在有Win32 API可以访问代理位置,但由于一系列不幸的事件,这些API不是.NET正在使用的

只要您的最小版本小于RS3,您将获得较旧的行为(但不完全支持.NET标准2.0)

到目前为止,如果您的最小版本是RS3或更高版本,则访问代理位置的唯一方法是通过WinRT API或Win32
FromApp
API。由于
broadFilesystemAccess
在RS4中,恐怕您不能在
System.IO
API中使用它


如果需要使用.NET API,则需要将minver设置为RS2或更低,然后要求用户使用
FolderPicker
选择文件夹。然后,您可以使用
FutureAccessList
来确保您可以持续访问该位置

我想这里的结论是.Net标准文件访问模型(System.IO名称空间)对于UWP应用程序来说已经完全崩溃了,根本没有办法让它工作。我希望broadFileSystemAccess能够解决这个问题,但不幸的是事实并非如此。希望这将很快得到解决。

但同样的功能,它与min ver 15063一起工作。为什么我在设置min ver 17134时不这样?这是非常不寻常的,因为根据文档,它应该到处失败,特别是当你在机器上运行17134时,它无论如何都应该使用最新的API。。。你能发布一些源代码吗?或者更好——你能在GitHub上发布一些显示这种行为的简单应用程序吗?我会在我的机器中进行验证我已经在上面的问题中为两种情况添加了github链接。在这些样本中,min ver设置为17134,但在该时间失败。但您可以尝试将min-ver更改为15063,您可以看到它正在工作。请帮忙解决问题,请看我的答案。这很复杂。除非我忘了什么:)(远离电脑…)哇!我对此一无所知,谢谢您的详细解释!尽管我理解标准化是一件好事,但似乎旧的行为更有用。如果UWP允许
System.IO
在将来考虑
broadFilesystemAccess
,那就太好了。因为我选择了从RS4开始的“broadFilesystemAccess”功能,所以我想限制应用程序的安装,因此保持最低版本17134。现在,您是否可以建议实现zip创建和FTP下载操作的任何替代方案(或者)我将使用min-ver as 15063和更低版本,在本例中,建议如何限制RS3和更低版本的安装?您能告诉我哪种方法可行以及如何实现吗?但是如果我使用“FolderPicker”而不是“broadFilesystemAccess”,FTP库下载api需要字符串类型的路径,而不是存储文件夹或存储文件类型。如果我再次使用StorageFolder的Path属性,当我访问direct Path时,会出现访问被拒绝异常,并且我的下载api失败。如何修复这个问题?我使用的FTP libarry是FluentFTP,我可以看到它们的代码,它使用System.IO名称空间,所以我遇到了这样的异常。我想知道是否有只使用WinRT兼容API的FTP库可用?我不知道,抱歉。