2013-03-20 65 views
1

我嘗試使用下面的代碼通過「開始菜單」文件夾做一個遞歸循環:C# - Shell.Namespace(pathFolder)返回NULL,甚至<pathFolder>存在

Function(string pathFolder) { 

Shell32.Shell shell = new Shell32.Shell(); 
Shell32.Folder folderObj = shell.NameSpace(pathFolder); 

foreach (Shell32.FolderItem2 item in objFolder.Items()) { 

    string typeItem = folderObj.GetDetailsOf(item, 2); 

    if (typeItem == "File folder") { 

     string folderName = folderObj.GetDetailsOf(item, 0); 
     Function(pathFolder + "\\" + folderName); 

    } else { 
     // do smomething... 
    } 
} 

的問題是Shell.Namespace適用於某些文件夾,並非全部。對於那些不工作的文件夾,即使這些文件夾確實存在,Shell.Namespace也會返回null。

我的代碼有什麼問題?

回答

1

爲什麼不使用System.IO命名空間類?我認爲它有更高級的API。對於你的情況,它可能是安全問題。

+0

這是因爲我想使用Shell對象的GetDetailsOf()方法來檢索一些其他文件的信息,例如:快捷鏈接的目標路徑。 – 2013-03-20 16:21:54

+0

哦,從來沒有想過他們(在任何情況下,你可以嘗試使用System.IO類來檢查你是否得到這些不工作的文件夾或找出他們是否會拋出任何異常 – user1429899 2013-03-20 16:32:52

+0

你是對的,使用System.IO。目錄對於我的情況要容易得多,以前我沒有想過。謝謝! 無論如何,對我的問題有什麼建議? – 2013-03-20 16:33:06

相關問題