小马的天空
我为软狂

导航

 
前台代码
<%@ 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">&nbsp;资源&nbsp; 
                                                    管理器
</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
+="&nbsp;&nbsp;&nbsp;&nbsp;";
            }

            
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()+"&nbsp; KB";
                }

                
else
                
{
                    size 
= ii.ToString()+"&nbsp; 字节";
                }


                
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\">&nbsp;&nbsp;<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\">&nbsp;&nbsp;<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()+"&nbsp; KB";
                }

                
else
                
{
                    fi_tmp 
= fi.Length.ToString()+"&nbsp; 字节";
                }


                
//添加文件信息

                
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\">&nbsp;&nbsp;<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);
            }

        }

    }

}

posted on 2006-06-30 23:15  Vinson  阅读(493)  评论(0)    收藏  举报