如何進入遞歸循環? 首先,我想循環列出文件夾和文件,當然這些文件應該放在它們各自的文件夾中,我要通過HTML和CSS在網頁上顯示列表。 我有一個List<DirectoryInfo>
和一個List<FileInfo>
用於存儲我的文件夾和文件。遞歸文件/文件夾列表循環出
我可以在我看來這樣做一個基本的foreach循環:
@foreach (DirectoryInfo folder in ViewBag.folders)
{
<p>@folder.Name</p>
foreach (FileInfo file in ViewBag.files)
{
if (folder.FullName == file.DirectoryName)
{
<p class="file" data-url="@file.FullName.Substring(file.DirectoryName.IndexOf("Content"))" style="margin-left:20px;">@file.Name</p>
}
}
}
而這個工作,它會顯示在各自的文件夾中的所有文件夾和文件。 但是,這裏出現的問題正如您可能已經猜到的那樣,子文件夾。 當前所有文件夾都在同一個列表中,包括子文件夾。
我可以做這樣的事情
<ol class="tree">
@{
int i = 1;
int subFolderi = 1;
foreach (DirectoryInfo folder in ViewBag.folders)
{
<li>
<label for="[email protected]">@folder.Name</label> <input type="checkbox" id="[email protected]" />
<ol>
@foreach (DirectoryInfo subFolder in ViewBag.folders)
{
if (folder.Name == subFolder.Parent.ToString())
{
<li>
<label for="[email protected]">@subFolder.Name</label> <input type="checkbox" id="[email protected]" />
<ol>
@foreach (FileInfo file in ViewBag.files)
{
if (subFolder.FullName == file.DirectoryName)
{
<li class="file" data-url="@file.FullName.Substring(file.DirectoryName.IndexOf("Content"))">@file.Name</li>
}
}
</ol>
</li>
}
subFolderi++;
}
@foreach (FileInfo file in ViewBag.files)
{
if (folder.FullName == file.DirectoryName)
{
<li class="file" data-url="@file.FullName.Substring(file.DirectoryName.IndexOf("Content"))">@file.Name</li>
}
}
</ol>
</li>
i++;
}
}
</ol>
,它就會把自己的父文件夾內的子文件夾,但是這顯然只適用於子文件夾的第一層,而不是文件夾內的子文件夾。 而且它還會將這些子文件夾顯示兩次,一次顯示在其父文件夾中,一次顯示在主文件夾列表中。
現在的問題是,我應該做一個遞歸循環來繼續獲取子文件夾內的子文件夾及其文件,或者我應該做某種形式的LINQ來將所有事先組合起來以使循環更容易? 還是有更好的方法來做到這一點? 我更喜歡乾淨的方式,因爲我仍然可以控制HTML/CSS,所以沒有jQuery插件或ASP控件使用數據源,然後自動創建所有內容。
工作液
<ol class="tree">
@printFolder(ViewBag.contentFolder)
</ol>
@helper printFolder(DirectoryInfo folder)
{
<li>
<label for="[email protected]">@folder.Name</label> <input type="checkbox" id="[email protected]" />
<ol>
@foreach(DirectoryInfo subFolder in folder.GetDirectories())
{
@printFolder(subFolder)
}
@foreach(FileInfo file in folder.GetFiles())
{
@printFile(file)
}
</ol>
</li>
}
@helper printFile(FileInfo file)
{
<li class="file" data-url="@file.FullName.Substring(file.DirectoryName.IndexOf("Content"))">@file.Name</li>
}
是否要打印整個文件/目錄樹? – kaptan
@kaptan內容文件夾中的整個目錄/文件樹,是的。當前的文件夾和文件列表已包含所有內容,但不知道如何正確打印 – HenrikP