2012-07-23 14 views
1

下面是我用來計算文件夾中的文件(只是文件而不是附加文件夾)的代碼片段。如果在這個文件夾中有多個文件,我需要拋出一個異常。如果文件夾中存在多個文件,則拋出異常

private bool CheckCondition2(String FolderName) 
{ 
    bool ConditionPassed = false; 

    System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(FolderName); 
    int count = dir.GetFiles().Length; 

    ConditionPassed = (count > 1); 

    return ConditionPassed; 
} 

然後,我把它稱爲主:

if (!CheckCondition2(SourceFolder)) 
{ 
    CanCopy = false; 
    throw new Exception("More than one mark-off file."); 
} 

目前,當我測試了一下,告訴我有在該目錄多個文件,儘管僅存在一個被。我在代碼中做了什麼錯誤?

+6

嗨,歡迎來到SO!您是否考慮過調試以遵循您的'ConditionPassed'變量的歷史記錄? – 2012-07-23 11:58:46

+0

@ J.Steen:將其寫爲答案並顯示正確的方法。 – 2012-07-23 12:00:14

回答

4

在您的方法中,如果有多個文件,則返回true

但是,在您的if語句中,您檢查了false。你似乎混合了一些。

調試代碼並隨着值的變化來查看是否有任何邏輯錯誤總是一個好主意。當然,更自動和可靠的方法是編寫單元測試。

你可以在你的方法切換的條件下,要

ConditionPassed = (count <= 1); 

這樣的話,這意味着該方法將返回true當你在一個「正確」的狀態是。你可以代替改變if語句讀取

if (CheckCondition2(SourceFolder)) 

要麼可能會爲你工作。在後面的例子中,我還建議將方法的名稱改爲HasMoreThanOneFile之類的名稱,以使其非常明顯。

+0

感謝您爲我清理一些東西。你說得對,我感到困惑。我調整了我的代碼,似乎現在正在工作。謝謝。 – 2012-07-23 13:11:31

+0

太棒了,不客氣。不要忘記使用答案左邊的投票計數器下方的標記來標記可接受的答案。 =) – 2012-07-23 13:13:05

0

試試這個:

ConditionPassed = (count <= 1); //check should pass if there is at most one file 
0

要麼改變的條件

ConditionPassed = (count <= 1); 

或if語句

if (CheckCondition2(SourceFolder))) 

我相信你的成功方案是要在最多1個文件源文件夾

0

代替使用布爾,爲什麼不嘗試...

System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(FolderName); 
int count = dir.GetFiles().Length; 

if (count > 1) 
{ 
    throw new Exception("More than one mark-off file."); 
} 
else 
{ 
    // Something else 
} 

它有點整潔的代碼(對不起了OCD在踢!)

0

我覺得有一個在你的邏輯缺陷。 ConditionPassed =(count> 1)應該是ConditionPassed =(計數< = 1)。希望這個幫助!

0

請嘗試調試您的代碼。 enter image description here

它只是在if語句進行小改後的工作,它應該是if (CheckCondition2(SourceFolder))

嘗試更新功能的名稱,以避免混亂。

+0

如果您需要更改代碼的任何部分,它本身不工作。 ;)隨着方法的命名,可能它的意圖是返回'true',因爲「通過」具有積極的含義。 =) – 2012-07-23 12:10:09

+0

感謝您的評論。我試圖太快了! – AksharRoop 2012-07-23 12:12:43

相關問題