2010-09-24 41 views
0

以下方法的返回類型是什麼? (T目錄樹數據類型?

public T GetDirectoryContentsRecursively (string path) { ... } 

的方法,將讀出的遠程目錄的內容,並讀取每個子目錄的內容和每個對象的子目錄等。

我曾經想過用List<object>,其中object可能是另一種List<object>等...但我不想調用者擁有一切被鑄造成FileSystemInfo他們想要使用的方法每次。

每個文件必須是FileInfo和每個目錄a DirectoryInfo,它們都繼承了抽象類FileSystemInfo

我只是不知道什麼數據類型是最好用來表示這一點。

任何想法?我是否需要製作自己的DirectoryTree類型?

編輯:數據將從服務器獲取,可能是按目錄的目錄,一次一個。我需要做的就是獲取這些數據並將其重構爲,我可以傳遞給用戶。這意味着我不能只通過一個DirectoryInfo,然後調用它的GetFileSystemInfos(),因爲該目錄不會存在於本地機器上。

回答

1

我想也許這種方法是錯誤的,你想通過樹結構實現什麼,你不能通過使用API​​s目錄來實現,當你需要時?

如果打算只是在遠程目錄上搜索文件夾/文件結構,那麼您不需要構建自己的內存中表示來執行此操作。如果您正在渲染結構,只需抓住頂層,然後按需加載其他層。

如果你真的想要走這條路線,那麼你可以返回IEnumerable<string>所有的目錄和文件路徑。 DirectoryInfoFileInfo是相對昂貴的對象。這一切都取決於目的,你可以提供更多的信息嗎?

+0

我不能只是返回一個'IEnumerable '因爲我想傳遞其他信息,比如每個文件的大小,修改等等......也許你對第二段是正確的,根本不需要這種方法。我已經有一個'公共IEnumerable GetDirectoryContents(字符串路徑)'。 – Nobody 2010-09-24 13:22:39

+0

我想我在想什麼是一旦你有一個文件路徑的列表,你可以使用'File'和'Directory' API來查找大小和屬性信息,當你需要它們。這又取決於目的。 – TheCodeKing 2010-09-24 15:53:13

0

嘗試這樣:

類MySweetObject {
的HashSet fileInfoSet;
HashSet directoryInfoSet;
//邏輯需要對文件進行操作,你認爲合適
//邏輯需要,你認爲合適
}

訪問文件,然後把它寫成:

公共MySweetObject GetDirectoryContentsRecursively(字符串路徑){...}

創建一個自定義對象並將其傳遞給調用者。

+0

downvote的任何特定原因? – Woot4Moo 2010-09-24 15:54:11