我正在尝试使用适用于 C#(.Net 4)的 WindowsAPICodePack 实现文件系统浏览器,它运行良好,除了 ShellObject 系统将 zip 文件视为文件夹,而我更喜欢它们是文件。有什么办法可以强迫它以这种方式工作吗?它所做的低级互操作超出了我的范围。
据我所知,它在内部询问该项目是文件夹还是文件系统元素。然后它使用这个(和一些类型检查)来找出它实际上是什么。如果它是压缩的,强制它把它当作一个文件是否安全?还是我必须做其他事情?
我正在尝试使用适用于 C#(.Net 4)的 WindowsAPICodePack 实现文件系统浏览器,它运行良好,除了 ShellObject 系统将 zip 文件视为文件夹,而我更喜欢它们是文件。有什么办法可以强迫它以这种方式工作吗?它所做的低级互操作超出了我的范围。
据我所知,它在内部询问该项目是文件夹还是文件系统元素。然后它使用这个(和一些类型检查)来找出它实际上是什么。如果它是压缩的,强制它把它当作一个文件是否安全?还是我必须做其他事情?
好的,首先,我看到 call 中有一个ShellNativeMethods.SFGAO
标志SFGAO_COMPRESSED
。这似乎并没有真正出现过,也许它已被弃用?
失败了,我最终只是作弊并在 ShellObjectFactory.cs 中执行了以下操作:
以下:
// Is this item a Folder?
bool isFolder = (sfgao & ShellNativeMethods.SFGAO.SFGAO_FOLDER) != 0;
我补充说:
// Is this a compressed Folder?
bool isCompressedFolder = (itemType == ".zip");
然后我换了
else if (isFolder)
和
else if (isFolder && !isCompressedFolder)
这是一个完全的hack,但它似乎有效,所以除非有人有更好的主意,否则我会坚持这一点。希望它会在未来帮助其他人,WindowsAPICodePack 上的帖子似乎很少见。