2011-04-25 70 views
3

當使用mono將一個.net應用程序移植到Linux時,我注意到它的實現IO.GetDirectories遵循Linux上的符號鏈接(問題在我的程序達到/home/clement/svn/obrowser/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib時變得明顯)。從符號鏈接中防止IO.GetDirectories()

我在mono的網站上找不到關於這種行爲的任何文檔,除了一個微小的論壇帖子外,沒有任何其他文檔。

你知道一個避免IO.GetDirectories符號鏈接的解決方法嗎?

+0

你有一個符號那點插座BlockDevice等)到父目錄? – 2011-04-25 11:48:25

+0

@Andrew:我沒有,但我的測試確實包含了角落案例,而且我買不起這種無限循環:/ – 2011-04-25 14:10:56

回答

5

您可以檢查File.GetAttributes,符號鏈接將具有ReparsePoint屬性,我使用Windows符號鏈接對此進行了測試,並在ubuntu 10.10上進行了測試。

這不會阻止GetDirectories遞歸枚舉,但你必須做你自己的遞歸。

如果你不需要跨平臺支持,你可能想看看Mono.Unix.UnixDirectoryInfo

+0

+1,謝謝!對於參考,我的研究似乎表明UnixDirectoryInfo總是將'IsSymLink'設置爲false;要使用的名稱空間似乎是Mono.Unix.UnixSymbolicLinkInfo。 – 2011-04-25 14:24:45

+0

有關我之前評論的詳細信息,請參閱http://lists.ximian.com/pipermail/mono-devel-list/2005-October/thread.html#15136。 – 2011-04-25 14:29:40

+0

測試更全面,它效果很好。謝謝! – 2011-04-27 12:59:29

0

如果Mono.Posix到添加到您的項目的引用,然後將下面的代碼將測試如果路徑指向符號鏈接:

Mono.Unix.UnixSymbolicLinkInfo i = new Mono.Unix.UnixSymbolicLinkInfo(path); 
if(i.IsSymbolicLink) ... 

您還可以測試其他文件類型(像先進先出,使用

switch(i.FileType)