我正在尝试使用WindowsAPICodePack for C#(.Net 4)实现文件系统浏览器,除了ShellObject系统将zip文件视为文件夹之外,它工作得很好,而我更喜欢它们是文件。有什么方法可以强制它以这种方式工作吗?它所做的低级互操作超出了我的范围。
据我所知,内部会询问该项是文件夹还是文件系统元素。然后它使用这个(以及一些类型检查)来确定它实际上是什么。如果它是压缩的,强制它将其视为文件是否安全?或者我还需要做其他事情吗?
答案 0 :(得分:1)
好的,首先,我看到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)
这是一个彻头彻尾的黑客攻击,但似乎有效,所以除非有人有更好的想法,否则我会坚持这一点。希望将来能帮助其他人,WindowsAPICodePack上的帖子似乎非常罕见。