2012-10-18 66 views
1

我特林測試,看是否有DirectoryInfo[]包含目錄 我的代碼如下如果DirectoryInfo中包含目錄

​​

對我來說這應該工作,但它似乎並不時它應該返回true 。任何想法,我做錯了什麼。

+1

也許你可以檢查'test.Any(d => d.FullName == dir.FullName +「\\」+「Test_Folder」)' – V4Vendetta

+2

值得注意的是,你不應該使用'dir.FullName +「\ \「+」Test_Folder「'當您可以輕鬆地完成'Path.Combine(dir.FullName,」Test_Folder「)'',因爲這是更合適的方式。 –

回答

2

使用Enumerable.Any

DirectoryInfo[] test = dir.GetDirectories(); 
if (test.Any(r => r.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder")))) 
{ 
    ContainsTestFolder = true; 
} 

你沒有得到想要的結果的原因是,包含比較對象的引用,而不是它的值。另外考慮使用Path.Combine而不是連接路徑。

+0

@downvoter,關心評論? – Habib

3

您試圖比較兩個複雜對象,其中所有屬性不等於,只比較它們的FullName屬性。

儘量使用謂詞使用FirstOrDefault和比較目錄全名

FirstOrDefault返回一個對象,如果發現null如果沒有找到

DirectoryInfo[] test = dir.GetDirectories(); 
if (test.FirstOrDefault(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))) != null) 
{ 
    ContainsTestFolder = true; 
} 

您可以使用也Any斷言它會返回一個bool

DirectoryInfo[] test = dir.GetDirectories(); 
if (test.Any(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder")))) 
{ 
    ContainsTestFolder = true; 
} 
+0

這個anwser是一個非常接近的第二,如果我可以給我2的upvotes也回答爲什麼我的代碼不起作用。但是Habib是第一個使用'.Any'的人,我看到了,我正在尋找返回一個bool –

+0

沒有必要得到那個測試文件夾? – Aelios

2

你不能以這種方式測試它,因爲你正在檢查2個不同的對象,它們具有相同的一個屬性。

嘗試

DirectoryInfo[] test = dir.GetDirectories(); 
if (test.Any(x => x.FullName.Equals(dir.FullName +"\\"+ "Test_Folder"))) 
{ 
    ContainsTestFolder = true; 
} 
+0

+1爲回答爲什麼我的代碼不起作用 –

+0

好的,爲誰投下了 - 任何原因爲什麼? –

+1

我找不到'存在'功能的任何想法? – Aelios

1

檢查目錄狀態(如果它包含任何子目錄如)

if(test.length >0) { // Do you coding here }enter code here 
2

您也可以使用。載如下:

var path = Directory.GetCurrentDirectory(); 
var ctf = Directory.GetDirectories(path).Contains(Path.Combine(path, "Test_Folder")); 

這也完全避免需要DirectoryInfo