文件管理系统
一、准备知识点:
1.对文件操作,先引用两个命名空间:using System.IO;(操作文件)、using Sysetem.Text;(操作文本)
2.创建文本文件:(1)创建文件名和文件内容(相当于新建文本文档)(2)创建StreamWriter对象,创建一个某某格式的文件(3)将内容写入数据流WriteLine (4)关闭StreamWrite对象.Close()
方法一:直接创建一个StreamWriter对象
string filename = TextBox1.Text
string filecontent= TextBox2.Text
StreamWriter sw =File.CreatText(Server.MapPath("~/txt/"+ filename +".txt"));
sw.WriteLine(filecontent);
sw.Close();
Response.Write("<script>alert('已经成功新建了一个’+ filename +'.txt,并添加了数据')</script>")
方法二:在创建StreamWriter对象之前先创建一个FileStream(文件流)对象,并在最后关闭它。
string filename = TextBox1.Text
string filecontent= TextBox2.Text
FileStream fs = new FileStream(Server.MapPath("~/txt/"+ filename + ".txt")),FileMode.Create,FileAccess.Write); //文件流fs的路径、文件打开方式:创建和写操作
StreamWriter sw = new StreamWriter(fs,Encoding.Default); //文件流fs和浏览器默认编码类型
sw.WriteLine(filecontent);
sw.Close();
fs.Close();
Response.Write("<script>alert('成功新建了一个’+ filename +'.txt,并添加了数据')</script>")
3.读取文本文本:
方法一:直接使用File.ReadAllText(文件路径,编码方式)
TextBox1.Text=File.ReadAllText(Server.MapPath("~/txt/**.txt"),Encoding.Default);
方法二:使用StreamReader对象以File.OpenText(文件路径)读取文件数据以及使用StreamBuilder对象的Append属性来添加读取文件的数据(UTF-8规范读取的数据)
StreamReader sr = File.OpenText(Server.MapPath("~/txt/**.txt"));
StreamBuilder sb = new StreamBuilder();
while(!sr.EndOfStream) //如果数据不到最后一行,继续添加(循环语句)
{ sb.Append(sr.ReadLine() +"<br>");}
sr.Close();
方法三:使用StreamBuilder对象的Append属性添加从StreamReader对象那里读取的数据流,与前一种方法不同的是,这次用到了FileStream的File.Open方法取代了File.OpenText(文件路径)的方法(GB2312规范读取数据)
StreamBuilder sb = new StreamBuilder();
FileStream fs = File.Open(Server.MapPath("~/txt/**.txt"),FileMode.Open,FileAccess.Read);
StreamReader sr = new StreamReader(fs,Encoding.Default);
while(!sr.EndOfStream)
{ sb.Append(sr.ReadLine() +"<br>");}
sr.Close();
fs.Close();
4.文件管理系统编程步骤:
(1)引入命名空间:using System.IO; using System.Text;
(2)申明变量:string F_path;
(3)Default.aspx页面中的代码页Page_Load代码:
if (!IsPostBack)
{
if (Request.QueryString["F_path"] == null)
{
F_path = Server.MapPath("."); //指定首次加载的路径为我们的根目录
ct_path.Text = F_path; //指定当前路径为根目录
tg_path.Text = F_path; //指定目标路径为根目录
fill(F_path); //填充路径
}
else
{
F_path = Server.UrlDecode(Request.QueryString["F_path"]); //URL解码路径
ct_path.Text = F_path;
tg_path.Text = F_path;
fill(F_path);
}
}
(4)添加fill方法,用于根据参数带来的路径列出目录中的文件和文件夹:
protected void fill(string path)
{
TableCell td;
TableRow tr;
Button btn;
//创建一个表格某一行的某个单元格
tr = new TableRow();
td = new TableCell();
//创建一个名为“名称”的按钮,按钮宽度:150
btn = new Button();
btn.Text = "名称";
btn.Width = 150;
//单元格中加入这个“名称”按钮控件,并将该单元格加入表格行的单元格集合中
td.Controls.Add(btn);
tr.Cells.Add(td);
//同理,再新建四个表格单元格,添加四个按钮
td = new TableCell();
btn = new Button(); //继续创建一个名为“类型”的按钮,宽度:60
btn.Text = "类型";
btn.Width = 60;
td.Controls.Add(btn);
tr.Cells.Add(td);
td = new TableCell();
btn = new Button(); //继续创建一个名为“大小”的按钮,宽度:80
btn.Text = "大小";
btn.Width = 80;
td.Controls.Add(btn);
tr.Cells.Add(td);
td = new TableCell();
btn = new Button(); //继续创建一个名为“修改日期”的按钮,宽度:80
btn.Text = "修改日期";
btn.Width = 80;
td.Controls.Add(btn);
tr.Cells.Add(td);
td = new TableCell();
btn = new Button(); //继续创建一个名为“操作”的按钮,宽度:200
btn.Text = "操作";
btn.Width = 200;
td.Controls.Add(btn);
tr.Cells.Add(td);
tb_dir.Rows.Add(tr); //tb_dir 为页面中整个填充的表格ID名,将表格行tr添加到该表格的行中
//接下来我们填充实际的内容了,也就是文件列表
//首先申明几个下面常用的文件字符串变量
string F_name; //文件名
string F_exp; //扩展名
string F_size; //大小
string F_time; //修改时间
HyperLink href; //用于对文件或者文件夹进行操作的链接(如打开、重命名、移动、复制等)
string url;
DirectoryInfo di = new DirectoryInfo(path); //新建一个带路径参数的文件夹
foreach (FileSystemInfo fsi in di.GetFileSystemInfos())
{ //GetFileSystemInfos是一个文件夹中所有文件个子目录的强类型FileSystemInfo项数组
//我们这里就来迭代数组中的每一个项
if (fsi is FileInfo) //如果是文件
{//如果该项是文件,首先得出他的相关属性
FileInfo fi = (FileInfo)fsi; //数组型转换为FileInfo类型
F_name = fi.Name; //获取文件的名字
if (fi.Extension.Length < 1) //如果文件没有扩展名
F_exp = "";
else
F_exp = fi.Extension.Remove(0, 1); // 文件扩展名留下不带“.”的扩展名
F_size = fi.Length.ToString(); //获取文件的大小
F_time = fi.LastWriteTime.ToShortDateString(); //获取上次写入当前文件或目录的时间
}
else
{ //否则是文件夹
di = (DirectoryInfo)fsi; //同样先转换
F_name = di.Name;
F_exp = "文件夹";
F_size = ""; //这里如果想要判断文件夹的大小的话就做个迭代,将里面全部的文件大小相加即可,反正我是这样想的,不知道有没更好的办法
F_time = di.LastWriteTime.ToShortDateString();
}
//以上每个项的相关属性都有了,下面该给页面附上列表了
tr = new TableRow();
//创建了表的某行,然后开始创建单元格加入Literal容器控件将数据一个个装入
td = new TableCell();
td.Controls.Add(new LiteralControl(F_name));
tr.Cells.Add(td);
td = new TableCell();
td.Controls.Add(new LiteralControl(F_exp));
tr.Cells.Add(td);
td = new TableCell();
td.Controls.Add(new LiteralControl(F_size));
tr.Cells.Add(td);
td = new TableCell();
td.Controls.Add(new LiteralControl(F_time));
tr.Cells.Add(td);
//接下来我们做几个对文件进行操作的按纽
if (fsi is DirectoryInfo)
//如果是文件夹则执行“打开”“重命名”“删除”“移动”“复制”操作
{
href = new HyperLink();
href.Text = "打开";
url = Server.UrlEncode(F_path); //将物理路径编码为服务器能识别的Url
href.NavigateUrl = "~/Default.aspx?F_path=" + url + "\\" + F_name;
td = new TableCell();
td.Controls.Add(href);
tr.Cells.Add(td);
}
else
{
td = new TableCell();
}
if (fsi is FileInfo)
//如果是文件,则执行“编辑”“删除”“移动”“复制”操作
{
href = new HyperLink();
href.Text = "编辑";
url = Server.UrlEncode(F_path);
href.NavigateUrl = "~/edit.aspx?ax=editfile&path=" + url + "&fname=" + F_name;
td.Controls.Add(href);
tr.Cells.Add(td);
}
else
{
href = new HyperLink();
href.Text ="重命名";
url = Server.UrlEncode(F_path);
href.NavigateUrl = "~/edit.aspx?ax=editdir&path=" + url + "&fname=" + F_name;
td.Controls.Add(href);
tr.Cells.Add(td);
}
if (fsi is FileInfo)
{
href = new HyperLink();
href.Text = "删除";
href.Attributes.Add("onClick", "return confirm('一旦删除,将无法恢复!')");
url = Server.UrlEncode(F_path);
href.NavigateUrl = "~/edit.aspx?ax=deletefile&path=" + url + "&fname=" + F_name;
td.Controls.Add(href);
}
else
{
href = new HyperLink();
href.Text = "删除";
href.Attributes.Add("onClick", "return confirm('一旦删除,将无法恢复!')");
url = Server.UrlEncode(F_path);
href.NavigateUrl = "~/edit.aspx?ax=deletedir&path=" + url + "&fname=" + F_name;
td.Controls.Add(href);
}
if (fsi is FileInfo)
{
href = new HyperLink();
href.Text = "移动";
url = Server.UrlEncode(F_path);
href.NavigateUrl = "~/edit.aspx?ax=movefile&path=" + url + "&fname=" + F_name;
td.Controls.Add(href);
}
else
{
href = new HyperLink();
href.Text = "移动";
url = Server.UrlEncode(F_path);
href.NavigateUrl = "~/edit.aspx?ax=movedir&path=" + url + "&fname=" + F_name;
td.Controls.Add(href);
}
if (fsi is FileInfo)
{
href = new HyperLink();
href.Text = "复制";
url = Server.UrlEncode(F_path);
href.NavigateUrl = "~/edit.aspx?ax=copyfile&path=" + url + "&fname=" + F_name;
td.Controls.Add(href);
}
else
{
href = new HyperLink();
href.Text = "复制";
url = Server.UrlEncode(F_path);
href.NavigateUrl = "~/edit.aspx?ax=copydir&path=" + url + "&fname=" + F_name;
td.Controls.Add(href);
}
tr.Cells.Add(td); //把所有的单元格填充到该行的单元格集合中
tb_dir.Rows.Add(tr); //将该行添加到整个列表中
}
//==============下面的代码是通过下拉列表框选择路径跳转目录===========================
DropDownList1.Items.Clear(); //先清除里面的全部项
DropDownList1.Items.Add("请选择目标目录");
if (F_path.Length > 4) //超过了路径长度比如:C:\\**
{
DropDownList1.Items.Add("返回上级目录");
DropDownList1.DataSource = Directory.GetDirectories(F_path); //文件夹目录数据绑定
DropDownList1.DataBind();
}
else //没有超过路径长度(正好是根目录比如C:\\)
{
string[] item = Directory.GetLogicalDrives(); //得到磁盘驱动列表
for (int i = 0; i < item.Length; i++) //遍历该根目录下的列表(以项目个数)
{
DropDownList1.Items.Add(item[i]);
}
DropDownList1.DataSource = Directory.GetDirectories(F_path);//下拉列表绑定路径
DropDownList1.DataBind();
}
if(chk_tv.Checked) //一个复选框,要求是否改变根目录树TreeView1的列表?
directorytoxml.BindTree(TreeView1, F_path); //以目录xml文档填充目录树
else
directorytoxml.BindTree(TreeView1, "e:\\\\net");
}
(5)创建文件和文件夹:
protected void btn_create_Click(object sender, EventArgs e)
{ //创建文件
file f = new file();
string tagFile = tg_path.Text + "\\" + new_file.Text; //目标路径=路径+新建文件名
f.Create(tagFile);
F_path = tg_path.Text;
fill(F_path);
}
protected void btn_dir_Click(object sender, EventArgs e)
{ //创建文件夹
FileDirectory fd = new FileDirectory();
string tagDir = tg_path.Text + "\\" + new_dir.Text; //目标路径=路径+新建文件夹名
fd.CreatedDir(tagDir);
F_path = tg_path.Text;
fill(F_path);
}
(6)自己创建两个新类: FileDirectory 对文件夹提供删除移动创建拷贝等操作方法、file 对文件提供删除移动创建拷贝等操作方法
a.在App_Code中建立一个FileDirectory.cs:
引入命名空间:using System.IO;
public class FileDirectory
{
private DirectoryInfo di; //对文件夹的访问和操作(DirectoryInfo是基类)
public FileDirectory()
{
}
/// <summary>
/// 创建新的文件夹
/// </summary>
/// <param name="TagDir">新文件夹的路径 + 名称</param>
public bool CreatedDir(string TagDir)
{
bool c;
di=new DirectoryInfo(TagDir);
try
{
if(!di.Exists) //必须是文件夹不存在
{
di.Create();
c=true;
}
else
c=false;
}
catch(Exception e)
{
c=false;
}
return c;
}
转自:http://blog.sina.com.cn/s/blog_4a93ccea0100cu49.html