如何在 UWP 中为 StorageFile 或 StorageFolder 获得具有 FILE_WRITE_ATTRIBUTES 访问权限的 Win32 HANDLE?
Posted
技术标签:
【中文标题】如何在 UWP 中为 StorageFile 或 StorageFolder 获得具有 FILE_WRITE_ATTRIBUTES 访问权限的 Win32 HANDLE?【英文标题】:How can I get a Win32 HANDLE with FILE_WRITE_ATTRIBUTES access for a StorageFile or StorageFolder in UWP? 【发布时间】:2021-04-23 09:24:47 【问题描述】:我正在尝试为 UWP 文本编辑器中的文件实现 Notepad++ 样式切换只读标志。我尝试使用SetFileAttributesFromApp
,但对于批处理文件和VBScript 文件等敏感文件类型,使用Access to the path is denied
失败。然后我尝试使用 SetFileInformationByHandle
,它需要 UWP 应用程序从 StorageFile
获取句柄。我尝试使用CreateSafeFileHandle
,但它只提供读写访问权限,修改属性的唯一方法是获得写访问权限。如果文件启用了只读标志或文件被拖放到编辑器,则获取写访问权限失败。我检查了this 问题的答案,该方法指定的唯一额外访问权限是读取属性和删除访问权限。所以我的问题是我可以让FILE_WRITE_ATTRIBUTES
访问从StorageFile
创建的句柄,如果可以,我该怎么做??
【问题讨论】:
请问您使用的项目是 C# UWP 项目还是 C++/WinRT UWP 项目? @YanGu-MSFT 抱歉没有说清楚(我以为SafeFileHandle
的用法会很明显),该项目是一个uwp C# 项目,P/Invoking 一些winapi
方法。跨度>
【参考方案1】:
当StorageFile
实例具有只读标志时,没有这样的API 支持让FILE_WRITE_ATTRIBUTES
访问从StorageFile
创建的句柄。
如果要在 UWP 文本编辑器中编辑拖动的文件,可以将拖动的文件复制到 LocalFolder。复制的文件将具有读写访问权限。您可以编辑复制的文件并将其替换为带有FileSavePicker
的原始拖动文件。请注意,如果您不需要保存,可以删除 LocalFolder
中的复制文件。这样,您就无需更改文件的只读标志了。
【讨论】:
以上是关于如何在 UWP 中为 StorageFile 或 StorageFolder 获得具有 FILE_WRITE_ATTRIBUTES 访问权限的 Win32 HANDLE?的主要内容,如果未能解决你的问题,请参考以下文章
如何使 StorageFile.DisplayName getter 在 UWP 中系统地排除 FileType
如何设置 UWP C# StorageFile 以将 SoftwareBitmap 存储到特定路径
另一个进程错误正在使用 UWP StorageFile 文件