我試圖找到指定的文件夾中的子目錄文件(我們稱之爲MyFolder文件)以及子目錄保存到一個字符串變量,以在別處使用。問題是,該指定文件夾中可能有多個子目錄,每個子目錄可能包含它們自己的子目錄。 MyFolder下樹中的所有子目錄中只有一個具有我正在查找的文件。獲得一個子目錄作爲一個字符串返回類型
在下面的例子,它可以是在任一的(可能更多,但對於本示例)的兩個位置,但從未兩者。當然,我試圖找到blah.txt
。
我做了一個遞歸的foreach
循環,如下所示,但它只會返回子目錄,如果該文件在第一級子目錄(/a, or /b)
中找到。如果該文件是在/aa or /bb
或更深(root/a/aa/aaa,
爲例),則返回NULL每次。我花了好幾個小時試圖通過緩慢地逐步調試調試器並仔細觀察本地窗口來解決這個問題,但我似乎無法弄清楚什麼是錯誤的。它發現的文件和存儲,而在第二foreach
環,但後來,由於某種原因,它開始向後循環(展示,直至碰到return "Null";
以前的目錄)正確的子目錄路徑。如果在第一級子目錄內找到該文件,則不會發生這種情況,只有在第二級或更深級別內找到該文件時纔會發生。
class Program
{
static string dir = @"C:\MyFolder\";
static void Main(string[] args)
{
Console.WriteLine(GetDirectory(dir));
Console.ReadKey();
}
static string GetDirectory(string dir)
{
foreach (string dName in Directory.GetDirectories(dir))
{
foreach (string fName in Directory.GetFiles(dName, "blah.txt"))
{
return dName;
}
GetDirectory(dName);
}
return "NULL";
}
}
我見過這樣的事情工作的唯一方法是,如果你不想要保存爲能夠使用一個字符串來(甚至可能是由其他功能)在其他地方使用的路徑,但要把它顯示立即作爲無效返回類型,例如在控制檯中(通過將返回更改爲"Console.WriteLine(dName)"
並適當修改函數調用)。我對C#非常陌生,以前我唯一的編碼經歷是JavaScript和AutoHotkey
,所以我對這類語言的瞭解還是非常有限,而我所擁有的僅僅是C#初學者指南書我已經通過閱讀和互聯網......我已經通過勇敢的努力尋找這個具體問題無濟於事。所以,任何幫助或指針,非常感謝!
這太簡單了,它的工作原理很好..只是不知道SearchOption參數。非常感謝你,尤其是對原來建議的鏈接和補充。非常感謝! – TheArtofX 2012-08-07 07:11:26