您的位置:首页 > 编程语言 > C#

C#两种方式获取指定文件夹下所有子目录及文件

2012-04-23 11:47 796 查看
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();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: