Как обрабатывать сжатые папки как файлы, используя ShellObject из WindowsAPICodePack? - PullRequest
1 голос
/ 25 мая 2010

Я пытаюсь реализовать браузер файловой системы, используя WindowsAPICodePack для C # (.Net 4), и он работает довольно хорошо, за исключением того, что система ShellObject обрабатывает zip-файлы как папки, тогда как я бы предпочел, чтобы они были файлами. Есть ли способ заставить его работать таким образом? Взаимодействие на низком уровне, которое оно делает, вне меня.

Насколько я могу сказать, внутренне он спрашивает, является ли элемент папкой или элементом файловой системы. Затем он использует это (и некоторые проверки типов), чтобы выяснить, что это на самом деле. Безопасно ли принудительно обрабатывать его как файл, если он сжат? Или я должен сделать что-то еще?

1 Ответ

1 голос
/ 26 мая 2010

Хорошо, во-первых, я увидел, что в 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 кажутся довольно редкими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...