結合 ASP.NET (CLR 平台) 與 XML (跨平台資料描述) 開發功能完整的網路硬碟:資料夾樹狀瀏覽、建立/刪除/重命名、上傳下載、密碼保護、權限管理。本文重點示範「動態讀取資料夾內容並繫結 DataGrid」核心邏輯。
public DataTable Bind(string fullFolderPath)
{
DataTable dt = new DataTable();
// 定義欄位
dt.Columns.Add("type", typeof(string)); // 檔案/資料夾
dt.Columns.Add("name", typeof(string)); // 名稱
dt.Columns.Add("action", typeof(string)); // 操作連結
dt.Columns.Add("owner", typeof(string)); // 建立者
foreach (string entry in Directory.GetFileSystemEntries(fullFolderPath))
{
DataRow dr = dt.NewRow();
string name = Path.GetFileName(entry);
dr["name"] = name;
if (File.Exists(entry))
{
dr["type"] = "檔案";
// 產生下載連結
string relUrl = fullFolderPath.Substring(fullFolderPath.IndexOf("NetHard"));
string url = "https://202.115.64.13/SharedSpace/" + relUrl + "/" + name;
dr["action"] = $"下載";
}
else if (Directory.Exists(entry))
{
dr["type"] = "資料夾";
string pwd = GetFolderPassword(entry);
int limitType = GetFolderLimitType(entry);
if (pwd != "no" && limitType != 1)
dr["action"] = $"密封";
else
dr["action"] = $"進入";
dr["owner"] = GetFolderOwner(entry);
}
dt.Rows.Add(dr);
}
return dt;
}
<asp:DataGrid ID="dgFolder" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn HeaderText="類型">
<ItemTemplate><%# Eval("type") %></ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="名稱">
<ItemTemplate><%# Eval("name") %></ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="操作">
<ItemTemplate><%# Eval("action") %></ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="建立者">
<ItemTemplate><%# Eval("owner") %></ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
folder.xml) 記錄 Password、LimitType(0=公開、1=唯讀、2=密碼保護)、Owner。PasswordValidate.aspx。File/Directory API。GridView + ObjectDataSource 簡化繫結代碼。jQuery File Upload 實現分塊上傳、進度條。