<%@ Page language="c#" Codebehind="Main.aspx.cs" AutoEventWireup="false" Inherits="AspFileOp.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/nav4-0" name="vs_targetSchema">
<script language="javascript" id="clientEventHandlersJS">
<!--
function Go(cmd1,par)
{
var f=document.Form1;
f.name1.value="";
f.cmd.value=cmd1;
for ( var i=0; i < f.elements.length; i++ )
{
if (true==f.elements[i].checked)
{
f.name1.value+=f.elements[i].name+"*";
}
}
switch(cmd1)
{
case "newdir":
var nd_tmp;
if (CheckNum()==0)
{
alert("将在主目录下新建文件夹!");
nd_tmp=prompt("请输入新建文件夹名称","新建文件夹");
f.name1.value="personal*";
}
else
{
nd_tmp =prompt("请输入新建文件夹名称","新建文件夹");
}
if ( null == nd_tmp||'' == nd_tmp)
{
return ;
}
else
{
f.name1.value+=nd_tmp;
}
break;
case "open":
if(par!=null)
{
f.name1.value=par+"*";
}
break;
case "del":
if(CheckNum()==0)
{
alert("请选择要删除的文件或文件夹!");
return ;
}
var tmp ="";
for ( var i=0; i < f.elements.length; i++ )
{
if (f.elements[i].checked==true)
{
tmp+=f.elements[i].name+"\n";
}
}
if(!confirm("将删除以下内容:\n"+tmp+"\n 确定吗?"))
{
return ;
}
break;
case "rename":
if(CheckNum()==0)
{
alert("请选中一个文件或文件夹!");
return ;
}
var tmp2="";
for ( var i=0; i < f.elements.length; i++ )
{
if (f.elements[i].checked==true)
{
tmp2=f.elements[i].name;
}
}
var i2 = tmp2.lastIndexOf('\\');
var tmp3 = tmp2.substring(i2+1,tmp2.length);
var rm_tmp =prompt("请输入新的文件名称",tmp3);
if ( null == rm_tmp||"" == rm_tmp||tmp3==rm_tmp)
{
return ;
}
else
{
f.name1.value+=rm_tmp;
}
break;
case "zip":
if(CheckNum()==0)
{
alert("请选择需要压缩的文件或文件夹!");
return ;
}
var zip_tmp=prompt("请输入压缩文件的名称:","");
if ( null == zip_tmp||"" == zip_tmp)
{
return ;
}
else
{
f.name1.value+=zip_tmp;
}
break;
case"split":
if(CheckNum()==0)
{
alert("请选中一个文件!");
return ;
}
var sp=prompt("需要分成几部分?(请填入不大于5的数字)","2");
if(sp==null||sp==""||isNaN(sp)||parseInt(sp)>5)
{
return;
}
else
{
f.name1.value+=sp;
}
break;
case"merge":
if(CheckNum()==0)
{
alert("请选中至少一个文件!");
return ;
}
break;
case"selectall":
var sel;
for ( var i=0; i < f.elements.length; i++ )
{
sel=f.elements[i].type;
if(sel=="checkbox")
{
f.elements[i].checked=true;
}
}
return;
case"deselectall":
var desel;
for ( var i=0; i < f.elements.length; i++ )
{
desel=f.elements[i].type;
if(desel=="checkbox")
{
f.elements[i].checked=false;
}
}
return;
}
f.submit();
}
function CheckNum()
{
var j =0;
var f=document.Form1;
for ( var i=0; i < f.elements.length; i++ )
{
if (true==f.elements[i].checked)
{
j++;
}
}
return j;
}
//-->
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<TABLE height="685" cellSpacing="0" cellPadding="0" width="451" border="0" ms_2d_layout="TRUE">
<TR vAlign="top">
<TD width="451" height="685">
<form id="Form1" name="fm" method="post" runat="server">
<TABLE height="434" cellSpacing="0" cellPadding="0" width="673" border="0" ms_2d_layout="TRUE">
<TR vAlign="top">
<TD width="4" height="7"></TD>
<TD width="199"></TD>
<TD width="184"></TD>
<TD width="286"></TD>
</TR>
<TR vAlign="top">
<TD height="404"></TD>
<TD colSpan="3">
<TABLE id="Table1" height="398" cellSpacing="0" cellPadding="0" width="668" bgColor="transparent" border="0">
<TR>
<TD align="middle" width="101" bgColor="lightblue" height="79"><FONT face="宋体" color="#ff00ff" size="5"> 资源
管理器</FONT>
</TD>
<TD width="509" bgColor="lemonchiffon" height="79">
<TABLE id="Table2" height="60" cellSpacing="0" cellPadding="0" width="437" align="center" border="0">
<TR align="right">
<TD><A href="javascript: Go('newdir');"><font size="-1"><B>新建文件夹</B></font></A></TD>
<TD><A href="javascript: Go('download');"><font size="-1"><B>下载</B></font></A></TD>
<TD><A href="javascript: Go('open');"><FONT size="-1"><B>打开</B></FONT></A></TD>
<TD><A href="javascript: Go('split');"><FONT size="-1"><B>分割文件</B></FONT></A></TD>
<TD><A href="javascript: Go('unzip');"><font size="-1"><B>Unzip解压</B></font></A></TD>
</TR>
<TR align="right">
<TD><A href="javascript: Go('expand_dir');"><FONT size="-1"><B>展开文件夹</B></FONT></A></TD>
<TD><A href="javascript: Go('upload');"><FONT size="-1"><B>上传</B></FONT></A></TD>
<TD><A href="javascript: Go('close');"><font size="-1"><B>关闭</B></font></A></TD>
<TD><A href="javascript: Go('merge');"><font size="-1"><B>合并文件</B></font></A></TD>
<TD><A href="javascript: Go('zip');"><FONT size="-1"><B>Zip压缩</B></FONT></A></TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD vAlign="top" width="101" bgColor="lavender" colSpan="1">
<TABLE id="Table3" height="66" cellSpacing="0" cellPadding="4" width="97" border="0">
<TR>
<TD><FONT size="2">编辑:</FONT></TD>
</TR>
<TR>
<TD align="right"><A href="javascript: Go('cut');"><B><FONT size="2">剪切</FONT></B></A>
</TD>
</TR>
<TR>
<TD align="right"><A href="javascript: Go('copy');"><B><FONT size="2">复制</FONT></B></A>
</TD>
</TR>
<TR>
<TD align="right"><A href="javascript: Go('paste');"><B><FONT size="2">粘贴</FONT></B></A></TD>
</TR>
<TR>
<TD align="right"><A href="javascript: Go('del');"><font size="-1"><B>删除</B></font></A></TD>
</TR>
<TR>
<TD align="right"><A href="javascript: Go('selectall');"><B><FONT size="2">全选</FONT></B></A></TD>
</TR>
<TR>
<TD align="right"><A href="javascript: Go('deselectall');"><B><FONT size="2">清除</FONT></B></A></TD>
</TR>
<TR>
<TD align="right"><A href="javascript: Go('rename');"><FONT size="-1"><B>重命名</B></FONT></A></TD>
</TR>
</TABLE>
</FONT></TD>
<TD id="td1" vAlign="top" width="509" bgColor="whitesmoke" colSpan="1" rowSpan="1" runat="server"><FONT face="宋体"></FONT><br>
</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR vAlign="top">
<TD colSpan="2" height="23"></TD>
<TD><INPUT id="cmd" type="hidden" runat="server"></TD>
<TD><INPUT id="name1" type="hidden" runat="server"></TD>
</TR>
</TABLE>
</form>
</TD>
</TR>
</TABLE>
</body>
</HTML>
后台代码
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace AspFileOp
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlTableCell td1;
protected System.Web.UI.HtmlControls.HtmlInputHidden cmd;
protected System.Web.UI.HtmlControls.HtmlInputHidden name1;
protected System.Web.UI.WebControls.Label Label1;
public string Expand_Dir;
private void Page_Load(object sender, System.EventArgs e)
{
string ServerDir = MapPath(".")+"\\";
this.Expand_Dir= "";
switch(this.cmd.Value)
{
case(""):
break;
case("open"): //打开
string[]open_tmp=this.name1.Value.Split(new char[]{'*'});
foreach(string open_tmp2 in open_tmp)
{
if(Directory.Exists(ServerDir+open_tmp2))
{
this.AddDirState(open_tmp2);
}
else if(File.Exists(ServerDir+open_tmp2))
{
Response.Redirect("http://"+Request.UrlReferrer.Host+ResolveUrl(open_tmp2));
}
}
break;
case("newdir"): //新建文件夹
string [] newdir_tmp = this.name1.Value.Split(new Char[]{'*'});
if(newdir_tmp.Length==2) //只包含“新建文件夹”及其父目录
{
if(newdir_tmp[0]=="")
{
newdir_tmp[0]="personal";
}
if(this.CheckName(newdir_tmp[1])&&Directory.Exists(ServerDir+newdir_tmp[0]))
{
string newdir_tmp2=ServerDir+newdir_tmp[0]+"\\"+newdir_tmp[1];
this.NameExisted(1,newdir_tmp2,out newdir_tmp2);
Directory.CreateDirectory(newdir_tmp2);
this.AddDirState( newdir_tmp[0]);
}
}
break;
case("expand_dir"): //展开文件夹
this.Expand_Dir =this.name1.Value;
break;
case("zip"): // 压缩
string[] zip_tmp = this.name1.Value.Split(new char[]{'*'});
string zip_tmp1= zip_tmp[zip_tmp.Length-1];
if(this.CheckName(zip_tmp1)) //检测文件命名的合法性
{
string zip_tmp2=zip_tmp1.Replace(".zip","");
//移除“.zip”后缀,并防止名称重复
this.NameExisted(1,ServerDir+@"personal\"+zip_tmp2+".zip",out zip_tmp2);
StreamWriter zip_sr =File.CreateText(ServerDir+"list.dat");
zip_sr.Write("");
zip_sr.Close();
for(int m =0;m<zip_tmp.Length-1;m++)
{
//以系统默认的 ANSI 编码创建压缩文件列表
StreamWriter zip_sw2 =new StreamWriter(ServerDir+"list.dat",true,System.Text.Encoding.Default);
zip_sw2.WriteLine(ServerDir+zip_tmp[m]);
zip_sw2.Close();
}
System.Diagnostics.Process Process1=new System.Diagnostics.Process();
Process1.StartInfo.FileName=ServerDir+"Winrar.exe";
Process1.StartInfo.Arguments=" a -ep1 -inul -y "+zip_tmp2+@" @"+ServerDir+"list.dat";
Process1.Start(); //进行压缩
while(!Process1.HasExited) //等待压缩的完成
{
}
}
break;
case("unzip"): //解压缩
string [] un_tmp =this.name1.Value.Split(new char[]{'*'});
int i2=0; //防止名称冲突的参数
foreach(string un_tmp2 in un_tmp)
{
if(un_tmp2!="")
{
string un_time=System.DateTime.Now.ToShortDateString()+"-"+System.DateTime.Now.Hour.ToString()+"-"+System.DateTime.Now.Minute.ToString()+"-"+(System.DateTime.Now.Second+i2).ToString();
string un_dir =ServerDir+@"personal\Unzip-"+un_time;
Directory.CreateDirectory(un_dir); //创建以解压时间为名的文件夹
StreamWriter un_sw=File.AppendText(ServerDir+"DirState.dat");
un_sw.Write(@"personal\Unzip-"+un_time+"*");
un_sw.Close();
System.Diagnostics.Process Process2=new System.Diagnostics.Process();
Process2.StartInfo.FileName=ServerDir+"Winrar.exe";
Process2.StartInfo.Arguments=" x -inul -y "+ServerDir+un_tmp2+" "+un_dir;
Process2.Start(); //进行解压
while(!Process2.HasExited) //等待解压的完成
{
}
i2++;
}
}
break;
case("upload"): //上传文件
string [] up=this.name1.Value.Split(new char []{'*'});
if(Directory.Exists(ServerDir+up[0]))
{
this.AddDirState(up[0]);
Server.Transfer("UpLoad.aspx?d="+up[0]);
}
break;
case("download"):
string[] down_tmp1=this.name1.Value.Split(new char[]{'*'});
int dl=0;
foreach(string down_tmp2 in down_tmp1)
{
if(down_tmp2!="")
{
dl++; // 检测下载文件的数目
}
}
if(dl==1&&!Directory.Exists(ServerDir+down_tmp1[0])) //单个文件的下载
{
if(File.Exists(ServerDir+down_tmp1[0]))
{
Response.Redirect("http://"+Request.UrlReferrer.Host+ResolveUrl(down_tmp1[0]),false);
}
}
else if(dl!=0) //多个文件或目录进行压缩打包下载
{
StreamWriter zip_sr =File.CreateText(ServerDir+"list.dat");
zip_sr.Write("");
zip_sr.Close();
for(int m =0;m<down_tmp1.Length;m++)
{
if(down_tmp1[m]!="")
{
//创建压缩文件列表
StreamWriter down_sw2 =new StreamWriter(ServerDir+"list.dat",true,System.Text.Encoding.Default);
down_sw2.WriteLine(ServerDir+down_tmp1[m]);
down_sw2.Close();
}
}
if(File.Exists(ServerDir+@"personal\DownLoad.zip"))
{
File.Delete(ServerDir+@"personal\DownLoad.zip"); //删除原有的 DownLoad.zip
}
string down_tmp3 =@"personal\DownLoad.zip";
System.Diagnostics.Process Process3=new System.Diagnostics.Process();
Process3.StartInfo.FileName=ServerDir+"Winrar.exe";
Process3.StartInfo.Arguments=" a -ep1 -inul -y "+ServerDir+down_tmp3+@" @"+ServerDir+"list.dat";
Process3.Start(); //启动压缩
while(!Process3.HasExited) //等待完成
{
}
Response.Redirect("http://"+Request.UrlReferrer.Host+ResolveUrl(down_tmp3));
}
break;
case("rename"):
string [] rename_tmp1 =this.name1.Value.Split(new char []{'*'});
if(rename_tmp1.Length==2) //只包含“原名”与“新名称”二项
{
if(this.CheckName(rename_tmp1[1])) //新名称是否合法
{
int rm1 =rename_tmp1[0].LastIndexOf("\\")+1;
int rm2 =rename_tmp1[0].Length-rm1;
string rename_tmp2=rename_tmp1[0].Remove(rm1,rm2);
//新名称是否重名
this.NameExisted(1,ServerDir+rename_tmp2+rename_tmp1[1],out rename_tmp2);
if(Directory.Exists(ServerDir+rename_tmp1[0]))
{
Directory.Move(ServerDir+rename_tmp1[0],rename_tmp2);
}
else if(File.Exists(ServerDir+rename_tmp1[0]))
{
File.Move(ServerDir+rename_tmp1[0],rename_tmp2);
}
}
}
break;
case("del"): //删除
string[] del_tmp1 =this.name1.Value.Split(new char []{'*'});
if(!Directory.Exists(ServerDir+@"personal\Recycler"))
{
//创建 personal\Recycler
Directory.CreateDirectory(ServerDir+@"personal\Recycler");
}
foreach(string del_s in del_tmp1)
{
if(del_s!="")
{
this.AddDirState("personal\\Recycler");
int d =del_s.LastIndexOf("\\")+1;
string del_tmp2 =del_s.Substring(d,del_s.Length-d); //获取文件名称
if(Directory.Exists(ServerDir+del_s))
{
if(del_s.IndexOf("personal\\Recycler")<0) //不在 personal\Recycler 里
{
this.NameExisted(1,ServerDir+"personal\\Recycler\\"+del_tmp2,out del_tmp2);
Directory.Move(ServerDir+del_s,del_tmp2);
}
else if(del_s!="personal\\Recycler") //保护 personal\Recycler
{
Directory.Delete(ServerDir+del_s,true);
}
}
else if(File.Exists(ServerDir+del_s))
{
if(del_s.IndexOf("personal\\Recycler")<0)
{
this.NameExisted(1,ServerDir+"personal\\Recycler\\"+del_tmp2,out del_tmp2);
File.Move(ServerDir+del_s,del_tmp2);
}
else
{
File.Delete(ServerDir+del_s);
}
}
}
}
break;
case("close"): //关闭
StreamReader close_sr=new StreamReader(ServerDir+"DirState.dat");
string close_tmp2 =close_sr.ReadToEnd();
close_sr.Close();
string [] close_tmp1=this.name1.Value.Split(new char []{'*'});
foreach(string ss in close_tmp1)
{
if(ss!="")
{
close_tmp2=close_tmp2.Replace(ss+"*","");
}
}
StreamWriter close_sw=File.CreateText(ServerDir+"DirState.dat");
close_sw.Write(close_tmp2);
close_sw.Close();
break;
case("split"): //分割
string [] sp = this.name1.Value.Split(new char[]{'*'});
string sp_file1 =ServerDir+sp[0];
int i3=0;
try
{
i3 = Int32.Parse(sp[sp.Length-1]);
}
catch
{
i3=2; //读取数字错误,则默认为 2
}
if(File.Exists(sp_file1)&&i3<=5&&i3>=2) //为减轻服务器负担,限定 i3 为 2 到 5 的整数
{
FileStream file1_fs =new FileStream(sp_file1,FileMode.Open);
int m=(int)file1_fs.Length;
for(int p=1;p<=i3;p++)
{
byte[] b1=new byte[0];
string file2="";
this.NameExisted(1,sp_file1,out file2);
if(p!=i3)
{
b1=new byte[m/i3];
file1_fs.Read(b1,0,m/i3);
FileStream file2_fs =new FileStream(file2,FileMode.Create);
file2_fs.Write(b1,0,m/i3);
file2_fs.Close();
}
else //最后一个部分的读取
{
b1 =new byte[m-(p-1)*m/i3];
file1_fs.Read(b1,0,m-(p-1)*m/i3);
FileStream file2_fs =new FileStream(file2,FileMode.Create);
file2_fs.Write(b1,0,m-(p-1)*m/i3);
file2_fs.Close();
}
// file1_fs.Seek(0,SeekOrigin.Current); 可要可不要
}
file1_fs.Close();
}
break;
case("merge"): //合并
string[] mer = this.name1.Value.Split(new char []{'*'});
bool dy=true; //是否执行合并的参数
foreach(string mer_file in mer)
{
if(mer_file!=""&&Directory.Exists(ServerDir+mer_file)) //是否有文件夹
{
dy=false;
}
}
if(mer.Length==1) //没有选中任何文件
{
dy=false;
}
if(dy)
{
string mer_name1="";
this.NameExisted(0,ServerDir+mer[0],out mer_name1);
File.Copy(ServerDir+mer[0],mer_name1,true); // 创建一个文件副本
int t1 =mer[0].LastIndexOf("\\");
string mer_name2=mer[0].Substring(t1,mer[0].Length-t1);
File.Move(ServerDir+mer[0],ServerDir+"personal\\Recycler"+mer_name2);
//追加至此副本的文件尾
FileStream mer_fs1 =new FileStream(mer_name1,FileMode.Append);
for(int mi =1;mi<mer.Length;mi++)
{
if(mer[mi]!="")
{
FileStream mer_fs2 =new FileStream(ServerDir+mer[mi],FileMode.Open);
byte[] b2 = new byte[mer_fs2.Length];
int j=(int)mer_fs2.Length;
mer_fs2.Read(b2,0,j);
mer_fs2.Close();
int tm =mer[mi].LastIndexOf("\\");
string mer_name3=mer[mi].Substring(tm,mer[mi].Length-tm);
//并入副本后移至 personal\Recycler 文件夹
File.Move(ServerDir+mer[mi],ServerDir+"personal\\Recycler"+mer_name3);
mer_fs1.Write(b2,0,j);
}
}
mer_fs1.Close();
}
break;
case("copy"): //复制
StreamWriter copy_sw = File.CreateText(ServerDir+"action.dat");
copy_sw.Write("copy*");
string [] copy_tmp =this.name1.Value.Split(new char[]{'*'});
foreach(string copy_tmp1 in copy_tmp)
{
if(copy_tmp1!="")
{
copy_sw.Write(copy_tmp1+"*"); //记录所复制的文件列表
}
}
copy_sw.Close();
break;
case("cut"): //剪切
StreamWriter cut_sw = File.CreateText(ServerDir+"action.dat");
cut_sw.Write("cut*");
string [] cut_tmp =this.name1.Value.Split(new char[]{'*'});
foreach(string cut_tmp1 in cut_tmp)
{
if(cut_tmp1!="")
{
cut_sw.Write(cut_tmp1+"*"); //记录所剪切的文件列表
}
}
cut_sw.Close();
break;
case("paste"): //粘贴
string [] paste_tmp =this.name1.Value.Split(new char[]{'*'});
if(paste_tmp[0]=="")
{
paste_tmp[0]="personal"; //没有选中任何文件夹,则默认为主目录
}
StreamReader paste_sw = new StreamReader(ServerDir+"action.dat");
string paste_tmp1=paste_sw.ReadToEnd();
paste_sw.Close();
string[] paste_tmp2=paste_tmp1.Split(new char []{'*'});
if(paste_tmp2[0]=="copy") //判断上一次操作
{
string paste_name="";
for(int p=1;p< paste_tmp2.Length;p++)
{
if(paste_tmp2[p]!="")
{
//获取文件名
int pa =paste_tmp2[p].LastIndexOf("\\");
string paste_tmp3 =paste_tmp2[p].Substring(pa,paste_tmp2[p].Length-pa);
//执行相应操作
if(Directory.Exists(ServerDir+paste_tmp2[p]))
{
this.NameExisted(1,ServerDir+paste_tmp[0]+paste_tmp3,out paste_name);
this.CopyDir(ServerDir+paste_tmp2[p],paste_name);
}
else if(File.Exists(ServerDir+paste_tmp2[p]))
{
this.NameExisted(1,ServerDir+paste_tmp[0]+paste_tmp3,out paste_name);
File.Copy(ServerDir+paste_tmp2[p],paste_name,true);
}
}
}
}
else if(paste_tmp2[0]=="cut")
{
string paste_name1="";
for(int t=1;t< paste_tmp2.Length;t++)
{
if(paste_tmp2[t]!="")
{
int y =paste_tmp2[t].LastIndexOf("\\");
string paste_tmp4 =paste_tmp2[t].Substring(y,paste_tmp2[t].Length-y);
if(Directory.Exists(ServerDir+paste_tmp2[t]))
{
this.NameExisted(1,ServerDir+paste_tmp[0]+paste_tmp4,out paste_name1);
Directory.Move(ServerDir+paste_tmp2[t],paste_name1);
}
else if(File.Exists(ServerDir+paste_tmp2[t]))
{
this.NameExisted(1,ServerDir+paste_tmp[0]+paste_tmp4,out paste_name1);
File.Move(ServerDir+paste_tmp2[t],paste_name1);
}
}
}
}
this.AddDirState(paste_tmp[0]);
//最后清空action.dat
StreamWriter paste_sw1 = File.CreateText(ServerDir+"action.dat");
paste_sw1.Write("");
paste_sw1.Close();
break;
}
this.BrowseDir(ServerDir+"personal",1,false);
this.ClearDirState();
// 在此处放置用户代码以初始化页面
}
Web Form Designer generated code
public bool DirState(string d)
{
//判断目录打开的状态
string ServerDir = MapPath(".")+"\\";
if(!File.Exists(ServerDir+"DirState.dat"))
{
StreamWriter sw =File.CreateText(ServerDir+"DirState.dat");
sw.Write("");
sw.Close();
}
StreamReader sr=new StreamReader(ServerDir+"DirState.dat");
string tmp = sr.ReadToEnd();
sr.Close();
string[] s =tmp.Split(new char []{'*'});
bool bl=false;
foreach(string s1 in s)
{
if(s1==d)
{
bl= true;
}
}
return bl;
}
public string Space(int b)
{
//添加空格
string c ="";
for(int m =1;m<=b;m++)
{
c+=" ";
}
return c;
}
public string ShortDir(string s)
{
//将文件的绝对路径转为相对路径
string ServerDir = MapPath(".")+"\\";
string d=s.Substring(ServerDir.Length,s.Length-ServerDir.Length);
return d;
}
public string OtherName(string s)
{
//获取特殊名称,仅为 javascript:Go("
","
\\
");
string ServerDir = MapPath(".")+"\\";
string tmp = s.Remove(0,ServerDir.Length);
string [] name =tmp.Split(new char []{'\\'});
string d="";
for(int i=0;i<name.Length;i++)
{
if(i!=0)
{
d+="\\"+"\\"+name[i];
}
else
{
d+=name[i];
}
}
return d;
}
public void BrowseDir(string s,int i,bool b)
{
//浏览目录
DirectoryInfo dir =new DirectoryInfo(s);
foreach(DirectoryInfo di in dir.GetDirectories()) //添加目录信息
{
long ii = this.DirSize(di.FullName);
string size="";
if(ii>=1024)
{
size = (ii/1024).ToString()+" KB";
}
else
{
size = ii.ToString()+" 字节";
}
if(b||this.Expand(this.ShortDir(di.FullName))||this.DirState(this.ShortDir(di.FullName))) //此目录为“打开”状态
{
this.AddDirState(this.ShortDir(di.FullName));
this.td1.Controls.Add(new LiteralControl(this.Space(i)+"<input type=\"checkbox\" name=\""+this.ShortDir(di.FullName)));
this.td1.Controls.Add(new LiteralControl( "\"value=\"dir\"><IMG alt=\"\" src=\"OPENFOLD.BMP\"> <a href=\"javascript: Go('open',\'"+this.OtherName(di.FullName)+"\');\">"));
this.td1.Controls.Add(new LiteralControl(di.Name+"</a>"+this.Space(2)+"<font size=2>"+size+this.Space(1)));
this.td1.Controls.Add(new LiteralControl(di.LastWriteTime.ToShortDateString()+" "+di.LastWriteTime.ToShortTimeString()+"</font><br>"));
if(b||this.Expand(this.ShortDir(di.FullName))) //此目录为“展开”
{
this.BrowseDir(di.FullName,i+2,true); //继续展开子目录
}
else //此目录为“打开”
{
this.BrowseDir(di.FullName,i+2,false); //显示此目录所有的文件及子目录
}
}
else //此目录为“关闭”状态
{
this.td1.Controls.Add(new LiteralControl(this.Space(i)+"<input type=\"checkbox\" name=\""+this.ShortDir(di.FullName)));
this.td1.Controls.Add(new LiteralControl( "\"value=\"dir\"><IMG alt=\"\" src=\"CLSDFOLD.BMP\"> <a href=\"javascript: Go('open',\'"+this.OtherName(di.FullName)+"\');\">"));
this.td1.Controls.Add(new LiteralControl(di.Name+"</a>"+this.Space(2)+"<font size=2>"+size+this.Space(1)));
this.td1.Controls.Add(new LiteralControl(di.LastWriteTime.ToShortDateString()+" "+di.LastWriteTime.ToShortTimeString()+"</font><br>"));
}
}
foreach(FileInfo fi in dir.GetFiles())
{
string fi_tmp="";
if(fi.Length>=1024)
{
fi_tmp = (fi.Length/1024).ToString()+" KB";
}
else
{
fi_tmp = fi.Length.ToString()+" 字节";
}
//添加文件信息
this.td1.Controls.Add(new LiteralControl(this.Space(i)+"<input type=\"checkbox\" name=\""+this.ShortDir(fi.FullName)));
this.td1.Controls.Add(new LiteralControl( "\"value=\"file\"><IMG alt=\"\" src=\"TXT.BMP\"> <a href=\"javascript: Go('open',\'"+this.OtherName(fi.FullName)+"\');\">"));
this.td1.Controls.Add(new LiteralControl(fi.Name+"</a>"+this.Space(2)+"<font size=2>"+fi_tmp+this.Space(1)));
this.td1.Controls.Add(new LiteralControl(fi.LastWriteTime.ToShortDateString()+" "+fi.LastWriteTime.ToShortTimeString()+"</font><br>"));
}
}
public bool Expand(string s)
{
//判断此目录是否需要展开
string[] tmp=this.Expand_Dir.Split(new char []{'*'});
bool b =false;
foreach(string dd in tmp)
{
if(dd==s)
{
b=true;
}
}
return b;
}
public void NameExisted(int i,string s, out string ss)
{
//如果文件名称已存在,则重新命名
string[] tmp =s.Split(new char []{'\\'});
string name=tmp[tmp.Length-1]; //从文件的绝对路径名分离出文件名
int l=s.LastIndexOf("\\")+1;
A: int j=name.LastIndexOf(")")-name.LastIndexOf("(");
if(Directory.Exists(s)) //文件夹的重新命名
{
i++;
if(j>1&&name.Length==name.LastIndexOf(")")+1) //判断是否以(i)结尾
{
name=name.Remove(name.LastIndexOf("("),j+1);
}
name+="("+i.ToString()+")";
s=s.Remove(l,s.Length-l);
s+=name;
goto A;
}
else if(File.Exists(s)) //重新命名文件
{
i++;
int n =name.LastIndexOf(".");
if(n<0) //是否有后缀名
{
if(j>1&&name.Length==name.LastIndexOf(")")+1)
{
name=name.Remove(name.LastIndexOf("("),j+1);
}
name+="("+i.ToString()+")";
}
else
{
if(j>1 && n==name.LastIndexOf(")")+1) //后缀名是否紧挨着(i)
{
name=name.Remove(name.LastIndexOf("("),j+1);
}
name=name.Insert(name.LastIndexOf("."),"("+i.ToString()+")");
}
s=s.Remove(l,s.Length-l);
s+=name;
goto A;
}
ss=s;
}
public void ClearDirState()
{
//清理 DirState.dat 文件
string ServerDir = MapPath(".")+"\\";
StreamReader sr = new StreamReader(ServerDir+"DirState.dat");
string tmp = sr.ReadToEnd();
sr.Close();
string[] tmp2 = tmp.Split(new char []{'*'});
foreach(string s in tmp2)
{
if(s!="")
{
if(!Directory.Exists(ServerDir+s))
{
tmp=tmp.Replace(s+"*","");
}
}
}
StreamWriter sw =File.CreateText(ServerDir+"DirState.dat");
sw.Write(tmp);
sw.Close();
}
public void AddDirState(string s)
{
//向 DirState.dat 添加目录
string ServerDir = MapPath(".")+"\\";
StreamReader sr=new StreamReader(ServerDir+"DirState.dat");
string tmp = sr.ReadToEnd();
sr.Close();
if(tmp.IndexOf(s+"*")<0)
{
StreamWriter sw =File.AppendText(ServerDir+"DirState.dat");
sw.Write(s+"*");
sw.Close();
}
}
public long DirSize(string s)
{
//获取目录的大小
long i=0L;
DirectoryInfo dir = new DirectoryInfo(s);
foreach (FileInfo f in dir.GetFiles())
{
i+=f.Length;
}
foreach(DirectoryInfo subdir in dir.GetDirectories())
{
i+=this.DirSize(subdir.FullName);
}
return i;
}
public bool CheckName(string s)
{
//检查文件名是否合法
bool b=true;
if(s.IndexOfAny(new char[]{'?','/','\\','<','>',':','*','\"','|'})>=0||s=="")
{
b=false;
}
return b;
}
public void CopyDir(string s, string d)
{
//复制目录的方法
Directory.CreateDirectory(d);
DirectoryInfo di =new DirectoryInfo(s);
foreach(DirectoryInfo dir in di.GetDirectories())
{
this.CopyDir(dir.FullName,d+"\\"+dir.Name);
}
foreach(FileInfo fi in di.GetFiles())
{
fi.CopyTo(d+"\\"+fi.Name,true);
}
}
}
}

浙公网安备 33010602011771号