2010-05-25 52 views
1

我想實現一個使用WindowsAPICodePack for C#(.Net 4)的文件系統瀏覽器,除了ShellObject系統將zip文件作爲文件夾對待之外,它工作得很好,但我更喜歡它們是文件。有什麼辦法可以強制它以這種方式工作嗎?它所做的低級別互操作超越了我。如何使用WindowsAPICodePack中的ShellObject將壓縮文件夾視爲文件?

據我所知,它在內部詢問該項目是文件夾還是文件系統元素。然後它使用這個(和一些類型檢查)來確定它實際是什麼。如果壓縮是強制它將其視爲文件是否安全?還是我必須做別的事情?

回答

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) 

這是一個總的黑客,但它似乎工作,所以除非有人有更好的主意,我這個貼。希望它能在將來幫助別人,WindowsAPICode包中的帖子看起來很罕見。

+0

那麼,.rar和.7z會發生什麼? – GONeale 2010-08-05 02:35:32

+0

Windows無法使用.zip原生地打開它,因此謝天謝地不是問題。 – JustABill 2010-08-06 03:24:25

+0

我絕對掙扎着與你同樣的問題,我測試SFGAO.COMPRESSED爲0x04000000和其他地方我讀爲0x80,兩者總是返回零:(這是令人難以置信的,他們都不工作,這是一個標準的Windows API ( – GONeale 2010-08-06 10:05:54

相關問題