C#兩種方式獲取指定資料夾下所有子目錄及檔案
using System.IO;
/// <summary>
/// 獲取指定目錄下的所有資料夾名
/// </summary>
/// <param name="path">目錄路徑</param>
/// <returns>string,返回所有資料夾名字</returns>
public string GetAllFolder(string path)
{
string folder_Names = "";
DirectoryInfo dir = new DirectoryInfo(path);
foreach (DirectoryInfo subdir in dir.GetDirectories())
folder_Names += subdir.FullName + ",";
return folder_Names;
}
using System.IO;
/// <summary>
/// 獲取指定目錄下的所有資料夾名
/// </summary>
/// <param name="path">目錄路徑</param>
/// <returns>string,返回所有資料夾名字</returns>
public string GetAllFolder(string path)
{
string folder_Names = "";
DirectoryInfo dir = new DirectoryInfo(path);
foreach (DirectoryInfo subdir in dir.GetDirectories())
folder_Names += subdir.FullName + ",";
return folder_Names;
}
方法2
-----------------------------------------------------------------
/****************************************
* 函式名稱:GetFoldAll(string Path)
* 功能說明:獲取指定資料夾下所有子目錄及檔案(樹形)
* 參 數:Path:詳細路徑
* 呼叫示列:
* string strDirlist = Server.MapPath("templates");
* this.Literal1.Text = EC.FileObj.GetFoldAll(strDirlist);
*****************************************/
/// <summary>
/// 獲取指定資料夾下所有子目錄及檔案
/// </summary>
/// <param name="Path">詳細路徑</param>
public static string GetFoldAll(string Path)
{
string str = "";
DirectoryInfo thisOne = new DirectoryInfo(Path);
str = ListTreeShow(thisOne, 0, str);
return str;
}
/// <summary>
/// 獲取指定資料夾下所有子目錄及檔案函式
/// </summary>
/// <param name="theDir">指定目錄</param>
/// <param name="nLevel">預設起始值,呼叫時,一般為0</param>
/// <param name="Rn">用於迭加的傳入值,一般為空</param>
/// <returns></returns>
public static string ListTreeShow(DirectoryInfo theDir, int nLevel, string Rn)//遞迴目錄 檔案
{
DirectoryInfo[] subDirectories = theDir.GetDirectories();//獲得目錄
foreach (DirectoryInfo dirinfo in subDirectories)
{
if (nLevel == 0)
{
Rn += "├";
}
else
{
string _s = "";
for (int i = 1; i <= nLevel; i++)
{
_s += "│ ";
}
Rn += _s + "├";
}
Rn += "<b>" + dirinfo.Name.ToString() + "</b><br />";
FileInfo[] fileInfo = dirinfo.GetFiles(); //目錄下的檔案
foreach (FileInfo fInfo in fileInfo)
{
if (nLevel == 0)
{
Rn += "│ ├";
}
else
{
string _f = "";
for (int i = 1; i <= nLevel; i++)
{
_f += "│ ";
}
Rn += _f + "│ ├";
}
Rn += fInfo.Name.ToString() + " <br />";
}
Rn = ListTreeShow(dirinfo, nLevel + 1, Rn);
}
return Rn;
}
/****************************************
* 函式名稱:GetFoldAll(string Path)
* 功能說明:獲取指定資料夾下所有子目錄及檔案(下拉框形)
* 參 數:Path:詳細路徑
* 呼叫示列:
* string strDirlist = Server.MapPath("templates");
* this.Literal2.Text = EC.FileObj.GetFoldAll(strDirlist,"tpl","");
*****************************************/
/// <summary>
/// 獲取指定資料夾下所有子目錄及檔案(下拉框形)
/// </summary>
/// <param name="Path">詳細路徑</param>
///<param name="DropName">下拉列表名稱</param>
///<param name="tplPath">預設選擇模板名稱</param>
public static string GetFoldAll(string Path, string DropName, string tplPath)
{
string strDrop = "<select name=\"" + DropName + "\" id=\"" + DropName + "\"><option value=\"\">--請選擇詳細模板--</option>";
string str = "";
DirectoryInfo thisOne = new DirectoryInfo(Path);
str = ListTreeShow(thisOne, 0, str, tplPath);
return strDrop + str + "</select>";
}
/// <summary>
/// 獲取指定資料夾下所有子目錄及檔案函式
/// </summary>
/// <param name="theDir">指定目錄</param>
/// <param name="nLevel">預設起始值,呼叫時,一般為0</param>
/// <param name="Rn">用於迭加的傳入值,一般為空</param>
/// <param name="tplPath">預設選擇模板名稱</param>
/// <returns></returns>
public static string ListTreeShow(DirectoryInfo theDir, int nLevel, string Rn, string tplPath)//遞迴目錄 檔案
{
DirectoryInfo[] subDirectories = theDir.GetDirectories();//獲得目錄
foreach (DirectoryInfo dirinfo in subDirectories)
{
Rn += "<option value=\"" + dirinfo.Name.ToString() + "\"";
if (tplPath.ToLower() == dirinfo.Name.ToString().ToLower())
{
Rn += " selected ";
}
Rn += ">";
if (nLevel == 0)
{
Rn += "┣";
}
else
{
string _s = "";
for (int i = 1; i <= nLevel; i++)
{
_s += "│ ";
}
Rn += _s + "┣";
}
Rn += "" + dirinfo.Name.ToString() + "</option>";
FileInfo[] fileInfo = dirinfo.GetFiles(); //目錄下的檔案
foreach (FileInfo fInfo in fileInfo)
{
Rn += "<option value=\"" + dirinfo.Name.ToString() + "/" + fInfo.Name.ToString() + "\"";
if (tplPath.ToLower() == fInfo.Name.ToString().ToLower())
{
Rn += " selected ";
}
Rn += ">";
if (nLevel == 0)
{
Rn += "│ ├";
}
else
{
string _f = "";
for (int i = 1; i <= nLevel; i++)
{
_f += "│ ";
}
Rn += _f + "│ ├";
}
Rn += fInfo.Name.ToString() + "</option>";
}
Rn = ListTreeShow(dirinfo, nLevel + 1, Rn, tplPath);
}
return Rn;
}
方法3
---------------------------------------------
public partial class MyFiles_List : System.Web.UI.Page
{
protected string File_List="";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//設定初始排序欄位為檔案修改時間FileLastWriteTime
gridFileList.Attributes.Add("SortExpression", "FileLastWriteTime");
gridFileList.Attributes.Add("SortDirection", "DESC");
BindGrid();
}
}
///<summary>
///要顯示的副檔名
///</summary>
///<param name="type"></param>
///<returns></returns>
public bool checkFileType(string type)
{
bool FileType = false;
string[] type_ = new string[4];
type = type.ToLower();
type_[0] = ".jpg";
type_[1] = ".gif";
type_[2] = ".jpeg";
type_[3] = ".png";
//可在此新增上傳檔案的字尾名
for (int i = 0; i < type_.Length; i++)
{
if (type.Contains(type_[i].ToString()))
{
FileType = true;
}
}
return FileType;
}
///<summary>
///遍資料夾下的所有子資料夾下的檔案
///</summary>
///<param name="ObjDirPath">資料夾</param>
public void GetFiles(string ObjDirPath)
{
DirectoryInfo SourceDir = new DirectoryInfo(ObjDirPath);
foreach (FileSystemInfo FSI in SourceDir.GetFileSystemInfos())
{
if (FSI is DirectoryInfo)
{
//如果是資料夾則遞迴
GetFiles(FSI.FullName);
}
else
{
//如果是符合要求的檔案則壘加集合,因為我只要求顯示圖片檔案,在checkFileType方法裡定義要顯示檔案的副檔名
if (checkFileType(FSI.Extension))
{
//由於是物理路徑,如e:\luobing_web\uploadfiles\picture\test.jpg這種形式,需要提取虛擬路徑,如:../uploadfiles/picture/test.jpg
string FilePath = ""; //一步寫來看起混亂,就分開寫了
FilePath = FSI.FullName.ToLower();
FilePath = FilePath.Substring(FilePath.LastIndexOf("uploadfiles\\"));
FilePath = "../"+FilePath.Replace("\\", "/");//這裡在路徑前加了../,因為我的專案裡頁面檔案和上傳資料夾不是同級資料夾
File_List += FilePath + ",";
}
}
}
}
///<summary>
///構造DataTABLE來繫結GRIDVIEW
///</summary>
///<returns></returns>
public DataTable FileDataTable()
{
GetFiles(Server.MapPath(@"~/UploadFiles/"));
//構造DataTABLE
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("FilePath", typeof(string)));
dt.Columns.Add(new DataColumn("FileName", typeof(string)));
dt.Columns.Add(new DataColumn("FileLength", typeof(string)));
dt.Columns.Add(new DataColumn("FileLastWriteTime", typeof(string)));
DataRow dr;
//將檔案陣列集合切割到陣列
string[] dtaArry = File_List.Split(',');
for (int i = 0; i < dtaArry.Length; i++)
{
if (dtaArry[i].Trim() != "")//防空元素
{
dr = dt.NewRow();
dr[0] = dtaArry[i];//檔案路徑
dr[1] = Path.GetFileName(dtaArry[i]);//檔名
//獲取檔案大小
FileInfo FI = new FileInfo(Server.MapPath(@dtaArry[i]));
dr[2] = Convert.ToString(FI.Length / 1000)+"KB";//獲取的是位元組byte,還需要轉換為千位元組KB
dr[3] = FI.LastWriteTime;
dt.Rows.Add(dr);
}
}
return dt;
}
///<summary>
///繫結gridview
///</summary>
private void BindGrid()
{
//獲取資料來源
DataTable dtb = FileDataTable();
//排序
string SortDirection = gridFileList.Attributes["SortDirection"].ToString();
string SortExpression = gridFileList.Attributes["SortExpression"].ToString();
dtb.DefaultView.Sort = string.Format("{0} {1}", SortExpression, SortDirection);
//賦資料來源並繫結
gridFileList.DataSource = dtb;
gridFileList.DataBind();
}
///<summary>
///新增
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
protected void btnAdd_Click(object sender, EventArgs e)
{
Response.Redirect("MyFiles_Add.aspx");
}
///<summary>
///刪除
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
protected void btnDel_Click(object sender, EventArgs e)
{
try
{
FileInfo fileinfo;
bool IsSelect = false;
for (int i = 0; i < gridFileList.Rows.Count; i++)
{
GridViewRow row = gridFileList.Rows[i];
if (((CheckBox)row.FindControl("chkDel")).Checked)
{
IsSelect = true;
Image Img = (Image)gridFileList.Rows[i].Cells[0].FindControl("ImgPath");
fileinfo = new FileInfo(Request.MapPath(@Img.ImageUrl));
if (fileinfo.Exists)
{
fileinfo.Delete();
}
}
}
if (IsSelect)
{
ValueChecked.MessageBox(Page, "刪除成功!");
}
else
{
ValueChecked.MessageBox(Page, "請選擇要刪除的行!");
}
}
catch
{
ValueChecked.MessageBox(Page, "刪除失敗!");
}
BindGrid();
}
///<summary>
///繫結資料行
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
protected void gridFileList_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Image Img = (Image)e.Row.Cells[0].FindControl("ImgPath");
Img.ImageUrl = e.Row.Cells[5].Text;
e.Row.Cells[5].Text="";
}
}
///<summary>
///分頁
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
protected void gridFileList_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gridFileList.PageIndex = e.NewPageIndex;
this.BindGrid();
}
///<summary>
///排序
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
protected void gridFileList_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression.ToString();
string sortdirection = "ASC";
if (sortExpression == gridFileList.Attributes["SortExpression"])
{
sortdirection = (gridFileList.Attributes["SortDirection"].ToString() == sortdirection ? "DESC" : "ASC");
}
gridFileList.Attributes["SortExpression"] = sortExpression;
gridFileList.Attributes["SortDirection"] = sortdirection;
this.BindGrid();
}
}
}